diff --git a/.rubocop.yml b/.rubocop.yml index f229c5a..a8507d0 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,3 +1,6 @@ +plugins: + - rubocop-minitest + AllCops: Exclude: - Rakefile diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index fc941e2..b086eb6 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -3,17 +3,17 @@ id: aa9449e7-c19d-411d-b8e2-f9c5fe982f6f management: docChecksum: 68de03e6e877c4fc50ebfdd47bb117ac docVersion: 0.0.3 - speakeasyVersion: 1.513.4 - generationVersion: 2.545.4 - releaseVersion: 0.7.7 - configChecksum: 8d77b95580838252b22ddb9bb7d067a0 + speakeasyVersion: 1.526.6 + generationVersion: 2.563.1 + releaseVersion: 0.8.0 + configChecksum: 178358599fd9be85132833f6e1c7adc7 repoURL: https://github.com/LukeHagar/plexruby.git repoSubDirectory: . installationURL: https://github.com/LukeHagar/plexruby published: true features: ruby: - core: 3.5.4 + core: 3.6.0 deprecations: 2.81.2 enums: 2.81.1 flattening: 2.81.1 @@ -1821,6 +1821,8 @@ generatedFiles: - lib/plex_ruby_sdk/playlists.rb - lib/plex_ruby_sdk/plex.rb - lib/plex_ruby_sdk/plex_api.rb + - lib/plex_ruby_sdk/sdk_hooks/hooks.rb + - lib/plex_ruby_sdk/sdk_hooks/types.rb - lib/plex_ruby_sdk/sdkconfiguration.rb - lib/plex_ruby_sdk/search.rb - lib/plex_ruby_sdk/server.rb @@ -1830,6 +1832,7 @@ generatedFiles: - lib/plex_ruby_sdk/statistics.rb - lib/plex_ruby_sdk/updater.rb - lib/plex_ruby_sdk/users.rb + - lib/plex_ruby_sdk/utils/retries.rb - lib/plex_ruby_sdk/utils/utils.rb - lib/plex_ruby_sdk/video.rb - lib/plex_ruby_sdk/watchlist.rb @@ -1844,6 +1847,7 @@ generatedFiles: - sorbet/rbi/gems/erubi@1.12.0.rbi - sorbet/rbi/gems/faraday-multipart@1.0.4.rbi - sorbet/rbi/gems/faraday-net_http@3.0.2.rbi + - sorbet/rbi/gems/faraday-retry@2.2.1.rbi - sorbet/rbi/gems/faraday@2.7.11.rbi - sorbet/rbi/gems/json@2.6.3.rbi - sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 72913d4..8b731ef 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -15,7 +15,10 @@ generation: oAuth2ClientCredentialsEnabled: false oAuth2PasswordEnabled: false ruby: - version: 0.7.7 + version: 0.8.0 + additionalDependencies: + development: {} + runtime: {} author: LukeHagar description: Ruby Client SDK Generated by Speakeasy flattenGlobalSecurity: false diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e867f0e..886e438 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.513.4 +speakeasyVersion: 1.526.6 sources: my-source: sourceNamespace: my-source @@ -9,19 +9,19 @@ sources: - main plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:2066ba94b55e21d651c79003e3cf402fb77c52a0969fc52310b3383fbed038f4 + sourceRevisionDigest: sha256:cffb18feaa0523b300655a6f0073caad99133b143f5a420fddbb1e1efe47bcaf sourceBlobDigest: sha256:1737023e29cd9cf36c07ccd8c8c48c47e14f47ce22b4d6ba9ee241afbbd8f351 tags: - latest - - speakeasy-sdk-regen-1741565240 + - speakeasy-sdk-regen-1743443509 targets: plexruby: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:2066ba94b55e21d651c79003e3cf402fb77c52a0969fc52310b3383fbed038f4 + sourceRevisionDigest: sha256:cffb18feaa0523b300655a6f0073caad99133b143f5a420fddbb1e1efe47bcaf sourceBlobDigest: sha256:1737023e29cd9cf36c07ccd8c8c48c47e14f47ce22b4d6ba9ee241afbbd8f351 codeSamplesNamespace: code-samples-ruby-plexruby - codeSamplesRevisionDigest: sha256:9b35ca5755fbeff5addaa5826eaf72ccdd02eff16f325778789aff2fce0136c3 + codeSamplesRevisionDigest: sha256:094430f15b6dd5749abddab15c1513dff3482821fe0e7020c39129b9d2d092a6 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest @@ -40,3 +40,5 @@ workflow: output: codeSamples.yaml registry: location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-ruby-plexruby + labelOverride: + fixedValue: PlexRuby diff --git a/.speakeasy/workflow.yaml b/.speakeasy/workflow.yaml index 4e66370..17b7562 100644 --- a/.speakeasy/workflow.yaml +++ b/.speakeasy/workflow.yaml @@ -12,8 +12,8 @@ targets: rubygems: token: $rubygems_auth_token codeSamples: - labelOverride: - fixedValue: PlexRuby output: codeSamples.yaml registry: location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-ruby-plexruby + labelOverride: + fixedValue: PlexRuby diff --git a/Gemfile.lock b/Gemfile.lock index d9e05e2..3acad64 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,10 @@ PATH remote: . specs: - plex_ruby_sdk (0.7.7) + plex_ruby_sdk (0.8.0) faraday faraday-multipart + faraday-retry (~> 2.2.1) rack rake sorbet-runtime @@ -13,51 +14,57 @@ GEM specs: ast (2.4.2) erubi (1.13.0) - faraday (2.12.1) + faraday (2.12.2) faraday-net_http (>= 2.0, < 3.5) json logger - faraday-multipart (1.0.4) - multipart-post (~> 2) + faraday-multipart (1.1.0) + multipart-post (~> 2.0) faraday-net_http (3.4.0) net-http (>= 0.5.0) + faraday-retry (2.2.1) + faraday (~> 2.0) json (2.8.2) - language_server-protocol (3.17.0.3) - logger (1.6.1) + language_server-protocol (3.17.0.4) + lint_roller (1.1.0) + logger (1.6.6) minitest (5.25.2) minitest-focus (1.4.0) minitest (>= 4, < 6) multipart-post (2.4.1) - net-http (0.5.0) + net-http (0.6.0) uri netrc (0.11.0) parallel (1.26.3) - parser (3.3.6.0) + parser (3.3.7.1) ast (~> 2.4.1) racc prism (0.27.0) racc (1.8.1) - rack (3.1.8) + rack (3.1.11) rainbow (3.1.1) rake (13.2.1) rbi (0.1.12) prism (>= 0.18.0, < 0.28) sorbet-runtime (>= 0.5.9204) - regexp_parser (2.9.2) - rexml (3.3.9) - rubocop (1.60.2) + regexp_parser (2.10.0) + rubocop (1.73.2) json (~> 2.3) - language_server-protocol (>= 3.17.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.30.0, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.38.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.36.1) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.38.1) parser (>= 3.3.1.0) + rubocop-minitest (0.37.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) ruby-progressbar (1.13.0) sorbet (0.5.11668) sorbet-static (= 0.5.11668) @@ -83,8 +90,10 @@ GEM thor (>= 1.2.0) yard-sorbet thor (1.3.2) - unicode-display_width (2.6.0) - uri (1.0.2) + unicode-display_width (3.1.4) + unicode-emoji (~> 4.0, >= 4.0.4) + unicode-emoji (4.0.4) + uri (1.0.3) yard (0.9.37) yard-sorbet (0.8.1) sorbet-runtime (>= 0.5) @@ -100,7 +109,8 @@ DEPENDENCIES minitest minitest-focus plex_ruby_sdk! - rubocop (~> 1.60.2) + rubocop (~> 1.73.2) + rubocop-minitest (~> 0.37.1) sorbet tapioca diff --git a/RELEASES.md b/RELEASES.md index afd18df..66aa9ba 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -746,4 +746,14 @@ Based on: ### Generated - [ruby v0.7.7] . ### Releases -- [Ruby Gems v0.7.7] https://rubygems.org/gems/plex_ruby_sdk/versions/0.7.7 - . \ No newline at end of file +- [Ruby Gems v0.7.7] https://rubygems.org/gems/plex_ruby_sdk/versions/0.7.7 - . + +## 2025-03-31 17:51:33 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.526.6 (2.563.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [ruby v0.8.0] . +### Releases +- [Ruby Gems v0.8.0] https://rubygems.org/gems/plex_ruby_sdk/versions/0.8.0 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index a794616..556ce58 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -7,7 +7,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getServerCapabilities + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -26,7 +26,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getServerPreferences + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -45,7 +45,7 @@ actions: update: x-codeSamples: - lang: ruby - label: updatePlayProgress + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -64,7 +64,7 @@ actions: update: x-codeSamples: - lang: ruby - label: markPlayed + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -83,7 +83,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getTimeline + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -115,7 +115,7 @@ actions: update: x-codeSamples: - lang: ruby - label: markUnplayed + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -134,7 +134,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getServerActivities + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -153,7 +153,7 @@ actions: update: x-codeSamples: - lang: ruby - label: cancelServerActivities + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -172,7 +172,7 @@ actions: update: x-codeSamples: - lang: ruby - label: stopAllTasks + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -191,7 +191,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getButlerTasks + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -210,7 +210,7 @@ actions: update: x-codeSamples: - lang: ruby - label: startAllTasks + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -229,7 +229,7 @@ actions: update: x-codeSamples: - lang: ruby - label: stopTask + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -248,7 +248,7 @@ actions: update: x-codeSamples: - lang: ruby - label: startTask + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -267,7 +267,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getAvailableClients + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -286,7 +286,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getCompanionsData + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -305,7 +305,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getDevices + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -324,7 +324,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getUserFriends + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -343,7 +343,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getGeoData + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -358,7 +358,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getHomeData + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -377,7 +377,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getGlobalHubs + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -396,7 +396,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-recently-added + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -407,7 +407,7 @@ actions: ) req = ::PlexRubySDK::Operations::GetRecentlyAddedRequest.new( - content_directory_id: 470161, + content_directory_id: 470_161, section_id: 2, type: ::PlexRubySDK::Operations::Type::TV_SHOW, include_meta: ::PlexRubySDK::Operations::IncludeMeta::ENABLE, @@ -424,7 +424,7 @@ actions: update: x-codeSamples: - lang: ruby - label: performSearch + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -443,7 +443,7 @@ actions: update: x-codeSamples: - lang: ruby - label: performVoiceSearch + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -462,7 +462,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getLibraryHubs + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -481,7 +481,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-server-identity + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -496,7 +496,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getTopWatchedContent + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -515,7 +515,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getFileHash + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -534,7 +534,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-media-meta-data + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -570,7 +570,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-banner-image + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -598,7 +598,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getMetadataChildren + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -617,7 +617,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-thumb-image + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -645,7 +645,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-recently-added-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -687,7 +687,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-search-all-libraries + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -716,7 +716,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-all-libraries + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -735,7 +735,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-watch-list + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -761,7 +761,7 @@ actions: update: x-codeSamples: - lang: ruby - label: deleteLibrary + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -780,7 +780,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-library-details + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -799,7 +799,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-actors-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -818,7 +818,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-all-media-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -849,7 +849,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-countries-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -868,7 +868,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-genres-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -887,7 +887,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-refresh-library-metadata + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -906,7 +906,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-search-library + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -925,7 +925,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-library-items + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -954,7 +954,7 @@ actions: update: x-codeSamples: - lang: ruby - label: logLine + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -973,7 +973,7 @@ actions: update: x-codeSamples: - lang: ruby - label: logMultiLine + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -996,7 +996,7 @@ actions: update: x-codeSamples: - lang: ruby - label: enablePaperTrail + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1015,7 +1015,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-media-providers + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1034,7 +1034,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getMyPlexAccount + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1053,7 +1053,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getResizedPhoto + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1066,7 +1066,7 @@ actions: req = ::PlexRubySDK::Operations::GetResizedPhotoRequest.new( width: 110.0, height: 165.0, - opacity: 643869, + opacity: 643_869, blur: 0.0, min_size: ::PlexRubySDK::Operations::MinSize::ONE, upscale: ::PlexRubySDK::Operations::Upscale::ONE, @@ -1082,7 +1082,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getPin + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1105,14 +1105,14 @@ actions: update: x-codeSamples: - lang: ruby - label: getTokenByPinId + label: PlexRuby source: |- require 'plex_ruby_sdk' s = ::PlexRubySDK::PlexAPI.new req = ::PlexRubySDK::Operations::GetTokenByPinIdRequest.new( - pin_id: 408895, + pin_id: 408_895, client_id: "3381b62b-9ab7-4e37-827b-203e9809eb58", client_name: "Plex for Roku", device_nickname: "Roku 3", @@ -1129,7 +1129,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getPlaylists + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1148,7 +1148,7 @@ actions: update: x-codeSamples: - lang: ruby - label: createPlaylist + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1174,7 +1174,7 @@ actions: update: x-codeSamples: - lang: ruby - label: uploadPlaylist + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1193,7 +1193,7 @@ actions: update: x-codeSamples: - lang: ruby - label: deletePlaylist + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1212,7 +1212,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getPlaylist + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1231,7 +1231,7 @@ actions: update: x-codeSamples: - lang: ruby - label: updatePlaylist + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1250,7 +1250,7 @@ actions: update: x-codeSamples: - lang: ruby - label: clearPlaylistContents + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1269,7 +1269,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getPlaylistContents + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1288,7 +1288,7 @@ actions: update: x-codeSamples: - lang: ruby - label: addPlaylistContents + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1307,7 +1307,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-server-resources + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1326,7 +1326,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getSearchResults + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1345,7 +1345,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getSourceConnectionInformation + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1364,7 +1364,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getTransientToken + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1383,7 +1383,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getServerList + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1402,7 +1402,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getBandwidthStatistics + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1421,7 +1421,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getStatistics + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1440,7 +1440,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getResourcesStatistics + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1459,7 +1459,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getSessions + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1478,7 +1478,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getSessionHistory + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1497,7 +1497,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getTranscodeSessions + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1516,7 +1516,7 @@ actions: update: x-codeSamples: - lang: ruby - label: stopTranscodeSession + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1535,7 +1535,7 @@ actions: update: x-codeSamples: - lang: ruby - label: applyUpdates + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1554,7 +1554,7 @@ actions: update: x-codeSamples: - lang: ruby - label: checkForUpdates + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1573,7 +1573,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getUpdateStatus + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1592,7 +1592,7 @@ actions: update: x-codeSamples: - lang: ruby - label: getTokenDetails + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1611,7 +1611,7 @@ actions: update: x-codeSamples: - lang: ruby - label: get-users + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1642,7 +1642,7 @@ actions: update: x-codeSamples: - lang: ruby - label: post-users-sign-in-data + label: PlexRuby source: |- require 'plex_ruby_sdk' @@ -1670,7 +1670,7 @@ actions: update: x-codeSamples: - lang: ruby - label: startUniversalTranscode + label: PlexRuby source: |- require 'plex_ruby_sdk' diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md index 3c2e733..b18d78b 100644 --- a/docs/sdks/hubs/README.md +++ b/docs/sdks/hubs/README.md @@ -65,7 +65,7 @@ s = ::PlexRubySDK::PlexAPI.new( ) req = ::PlexRubySDK::Operations::GetRecentlyAddedRequest.new( - content_directory_id: 470161, + content_directory_id: 470_161, section_id: 2, type: ::PlexRubySDK::Operations::Type::TV_SHOW, include_meta: ::PlexRubySDK::Operations::IncludeMeta::ENABLE, diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md index 4b709b4..a30f704 100644 --- a/docs/sdks/plex/README.md +++ b/docs/sdks/plex/README.md @@ -237,7 +237,7 @@ require 'plex_ruby_sdk' s = ::PlexRubySDK::PlexAPI.new req = ::PlexRubySDK::Operations::GetTokenByPinIdRequest.new( - pin_id: 408895, + pin_id: 408_895, client_id: "3381b62b-9ab7-4e37-827b-203e9809eb58", client_name: "Plex for Roku", device_nickname: "Roku 3", diff --git a/docs/sdks/server/README.md b/docs/sdks/server/README.md index e8c2131..6c93413 100644 --- a/docs/sdks/server/README.md +++ b/docs/sdks/server/README.md @@ -207,7 +207,7 @@ s = ::PlexRubySDK::PlexAPI.new( req = ::PlexRubySDK::Operations::GetResizedPhotoRequest.new( width: 110.0, height: 165.0, - opacity: 643869, + opacity: 643_869, blur: 0.0, min_size: ::PlexRubySDK::Operations::MinSize::ONE, upscale: ::PlexRubySDK::Operations::Upscale::ONE, diff --git a/lib/plex_ruby_sdk/activities.rb b/lib/plex_ruby_sdk/activities.rb index fbaaeec..3dfbf33 100644 --- a/lib/plex_ruby_sdk/activities.rb +++ b/lib/plex_ruby_sdk/activities.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -26,8 +29,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetServerActivitiesResponse) } - def get_server_activities + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerActivitiesResponse) } + def get_server_activities(timeout_ms = nil) # get_server_activities - Get Server Activities # Get Server Activities url, params = @sdk_configuration.get_server_details @@ -37,10 +40,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getServerActivities', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -69,8 +122,8 @@ module PlexRubySDK end - sig { params(activity_uuid: ::String).returns(::PlexRubySDK::Operations::CancelServerActivitiesResponse) } - def cancel_server_activities(activity_uuid) + sig { params(activity_uuid: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::CancelServerActivitiesResponse) } + def cancel_server_activities(activity_uuid, timeout_ms = nil) # cancel_server_activities - Cancel Server Activities # Cancel Server Activities request = ::PlexRubySDK::Operations::CancelServerActivitiesRequest.new( @@ -89,10 +142,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'cancelServerActivities', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/authentication.rb b/lib/plex_ruby_sdk/authentication.rb index 5b6a1a8..ca49776 100644 --- a/lib/plex_ruby_sdk/authentication.rb +++ b/lib/plex_ruby_sdk/authentication.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -30,8 +33,8 @@ module PlexRubySDK end - sig { params(type: ::PlexRubySDK::Operations::GetTransientTokenQueryParamType, scope: ::PlexRubySDK::Operations::Scope).returns(::PlexRubySDK::Operations::GetTransientTokenResponse) } - def get_transient_token(type, scope) + sig { params(type: ::PlexRubySDK::Operations::GetTransientTokenQueryParamType, scope: ::PlexRubySDK::Operations::Scope, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTransientTokenResponse) } + def get_transient_token(type, scope, timeout_ms = nil) # get_transient_token - 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. # @@ -48,11 +51,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTransientToken', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -77,8 +130,8 @@ module PlexRubySDK end - sig { params(source: ::String).returns(::PlexRubySDK::Operations::GetSourceConnectionInformationResponse) } - def get_source_connection_information(source) + sig { params(source: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSourceConnectionInformationResponse) } + def get_source_connection_information(source, timeout_ms = nil) # get_source_connection_information - 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. @@ -95,11 +148,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getSourceConnectionInformation', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -124,8 +227,8 @@ module PlexRubySDK end - sig { params(server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetTokenDetailsResponse) } - def get_token_details(server_url = nil) + sig { params(server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTokenDetailsResponse) } + def get_token_details(server_url = nil, timeout_ms = nil) # get_token_details - Get Token Details # Get the User data from the provided X-Plex-Token base_url = Utils.template_url(GET_TOKEN_DETAILS_SERVERS[0], { @@ -136,10 +239,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTokenDetails', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -168,8 +321,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::PostUsersSignInDataRequest), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::PostUsersSignInDataResponse) } - def post_users_sign_in_data(request, server_url = nil) + sig { params(request: T.nilable(::PlexRubySDK::Operations::PostUsersSignInDataRequest), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::PostUsersSignInDataResponse) } + def post_users_sign_in_data(request, server_url = nil, timeout_ms = nil) # post_users_sign_in_data - Get User Sign In Data # Sign in user with username and password and return user data with Plex authentication token base_url = Utils.template_url(POST_USERS_SIGN_IN_DATA_SERVERS[0], { @@ -179,17 +332,68 @@ module PlexRubySDK headers = Utils.get_headers(request) req_content_type, data, form = Utils.serialize_request_body(request, :request_body, :form) headers['content-type'] = req_content_type + + if form + body = Utils.encode_form(form) + elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded') + body = URI.encode_www_form(data) + else + body = data + end headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - if form - req.body = Utils.encode_form(form) - elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded') - req.body = URI.encode_www_form(data) + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'post-users-sign-in-data', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.body = body + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) else - req.body = data + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' end end diff --git a/lib/plex_ruby_sdk/butler.rb b/lib/plex_ruby_sdk/butler.rb index c55ede1..d393d4c 100644 --- a/lib/plex_ruby_sdk/butler.rb +++ b/lib/plex_ruby_sdk/butler.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetButlerTasksResponse) } - def get_butler_tasks + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetButlerTasksResponse) } + def get_butler_tasks(timeout_ms = nil) # get_butler_tasks - Get Butler tasks # Returns a list of butler tasks url, params = @sdk_configuration.get_server_details @@ -31,10 +34,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getButlerTasks', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -63,8 +116,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::StartAllTasksResponse) } - def start_all_tasks + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StartAllTasksResponse) } + def start_all_tasks(timeout_ms = nil) # start_all_tasks - 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. @@ -79,10 +132,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'startAllTasks', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -107,8 +210,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::StopAllTasksResponse) } - def stop_all_tasks + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StopAllTasksResponse) } + def stop_all_tasks(timeout_ms = nil) # stop_all_tasks - Stop all Butler tasks # This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. # @@ -119,10 +222,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'stopAllTasks', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -147,8 +300,8 @@ module PlexRubySDK end - sig { params(task_name: ::PlexRubySDK::Operations::TaskName).returns(::PlexRubySDK::Operations::StartTaskResponse) } - def start_task(task_name) + sig { params(task_name: ::PlexRubySDK::Operations::TaskName, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StartTaskResponse) } + def start_task(task_name, timeout_ms = nil) # start_task - 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. @@ -172,10 +325,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'startTask', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -200,8 +403,8 @@ module PlexRubySDK end - sig { params(task_name: ::PlexRubySDK::Operations::PathParamTaskName).returns(::PlexRubySDK::Operations::StopTaskResponse) } - def stop_task(task_name) + sig { params(task_name: ::PlexRubySDK::Operations::PathParamTaskName, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StopTaskResponse) } + def stop_task(task_name, timeout_ms = nil) # stop_task - 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. # @@ -221,10 +424,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'stopTask', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/hubs.rb b/lib/plex_ruby_sdk/hubs.rb index 3ca53d9..a47f26d 100644 --- a/lib/plex_ruby_sdk/hubs.rb +++ b/lib/plex_ruby_sdk/hubs.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(count: T.nilable(::Float), only_transient: T.nilable(::PlexRubySDK::Operations::OnlyTransient)).returns(::PlexRubySDK::Operations::GetGlobalHubsResponse) } - def get_global_hubs(count = nil, only_transient = nil) + sig { params(count: T.nilable(::Float), only_transient: T.nilable(::PlexRubySDK::Operations::OnlyTransient), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetGlobalHubsResponse) } + def get_global_hubs(count = nil, only_transient = nil, timeout_ms = nil) # get_global_hubs - Get Global Hubs # Get Global Hubs filtered by the parameters provided. request = ::PlexRubySDK::Operations::GetGlobalHubsRequest.new( @@ -37,11 +40,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getGlobalHubs', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -70,8 +123,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetRecentlyAddedRequest)).returns(::PlexRubySDK::Operations::GetRecentlyAddedResponse) } - def get_recently_added(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetRecentlyAddedRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetRecentlyAddedResponse) } + def get_recently_added(request, timeout_ms = nil) # get_recently_added - Get Recently Added # This endpoint will return the recently added content. # @@ -83,11 +136,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-recently-added', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -107,8 +210,8 @@ module PlexRubySDK end - sig { params(section_id: ::Float, count: T.nilable(::Float), only_transient: T.nilable(::PlexRubySDK::Operations::QueryParamOnlyTransient)).returns(::PlexRubySDK::Operations::GetLibraryHubsResponse) } - def get_library_hubs(section_id, count = nil, only_transient = nil) + sig { params(section_id: ::Float, count: T.nilable(::Float), only_transient: T.nilable(::PlexRubySDK::Operations::QueryParamOnlyTransient), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetLibraryHubsResponse) } + def get_library_hubs(section_id, count = nil, only_transient = nil, timeout_ms = nil) # get_library_hubs - Get library specific hubs # This endpoint will return a list of library specific hubs # @@ -131,11 +234,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getLibraryHubs', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/library.rb b/lib/plex_ruby_sdk/library.rb index 61fbf4a..0290d77 100644 --- a/lib/plex_ruby_sdk/library.rb +++ b/lib/plex_ruby_sdk/library.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(url: ::String, type: T.nilable(::Float)).returns(::PlexRubySDK::Operations::GetFileHashResponse) } - def get_file_hash(url, type = nil) + sig { params(url: ::String, type: T.nilable(::Float), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetFileHashResponse) } + def get_file_hash(url, type = nil, timeout_ms = nil) # get_file_hash - Get Hash Value # This resource returns hash values for local files request = ::PlexRubySDK::Operations::GetFileHashRequest.new( @@ -37,11 +40,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getFileHash', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -66,8 +119,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetRecentlyAddedLibraryRequest)).returns(::PlexRubySDK::Operations::GetRecentlyAddedLibraryResponse) } - def get_recently_added_library(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetRecentlyAddedLibraryRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetRecentlyAddedLibraryResponse) } + def get_recently_added_library(request, timeout_ms = nil) # get_recently_added_library - Get Recently Added # This endpoint will return the recently added content. # @@ -79,11 +132,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-recently-added-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -112,8 +215,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetAllLibrariesResponse) } - def get_all_libraries + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetAllLibrariesResponse) } + def get_all_libraries(timeout_ms = nil) # get_all_libraries - 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. @@ -129,10 +232,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-all-libraries', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -161,8 +314,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, include_details: T.nilable(::PlexRubySDK::Operations::IncludeDetails)).returns(::PlexRubySDK::Operations::GetLibraryDetailsResponse) } - def get_library_details(section_key, include_details = nil) + sig { params(section_key: ::Integer, include_details: T.nilable(::PlexRubySDK::Operations::IncludeDetails), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetLibraryDetailsResponse) } + def get_library_details(section_key, include_details = nil, timeout_ms = nil) # get_library_details - Get Library Details # ## Library Details Endpoint # @@ -222,11 +375,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-library-details', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -255,8 +458,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer).returns(::PlexRubySDK::Operations::DeleteLibraryResponse) } - def delete_library(section_key) + sig { params(section_key: ::Integer, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::DeleteLibraryResponse) } + def delete_library(section_key, timeout_ms = nil) # delete_library - Delete Library Section # Delete a library using a specific section id request = ::PlexRubySDK::Operations::DeleteLibraryRequest.new( @@ -275,10 +478,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'deleteLibrary', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -303,8 +556,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetLibraryItemsRequest)).returns(::PlexRubySDK::Operations::GetLibraryItemsResponse) } - def get_library_items(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetLibraryItemsRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetLibraryItemsResponse) } + def get_library_items(request, timeout_ms = nil) # get_library_items - 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. @@ -341,11 +594,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-library-items', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -374,8 +677,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetAllMediaLibraryRequest)).returns(::PlexRubySDK::Operations::GetAllMediaLibraryResponse) } - def get_all_media_library(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetAllMediaLibraryRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetAllMediaLibraryResponse) } + def get_all_media_library(request, timeout_ms = nil) # get_all_media_library - Get all media of library # Retrieves a list of all general media data for this library. # @@ -392,11 +695,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-all-media-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -426,8 +779,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, force: T.nilable(::PlexRubySDK::Operations::Force)).returns(::PlexRubySDK::Operations::GetRefreshLibraryMetadataResponse) } - def get_refresh_library_metadata(section_key, force = nil) + sig { params(section_key: ::Integer, force: T.nilable(::PlexRubySDK::Operations::Force), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetRefreshLibraryMetadataResponse) } + def get_refresh_library_metadata(section_key, force = nil, timeout_ms = nil) # get_refresh_library_metadata - Refresh Metadata Of The Library # This endpoint Refreshes all the Metadata of the library. # @@ -449,11 +802,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-refresh-library-metadata', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -478,8 +881,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetSearchLibraryQueryParamType).returns(::PlexRubySDK::Operations::GetSearchLibraryResponse) } - def get_search_library(section_key, type) + sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetSearchLibraryQueryParamType, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSearchLibraryResponse) } + def get_search_library(section_key, type, timeout_ms = nil) # get_search_library - Search Library # Search for content within a specific section of the library. # @@ -518,11 +921,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-search-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -551,8 +1004,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetGenresLibraryQueryParamType).returns(::PlexRubySDK::Operations::GetGenresLibraryResponse) } - def get_genres_library(section_key, type) + sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetGenresLibraryQueryParamType, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetGenresLibraryResponse) } + def get_genres_library(section_key, type, timeout_ms = nil) # get_genres_library - Get Genres of library media # Retrieves a list of all the genres that are found for the media in this library. # @@ -574,11 +1027,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-genres-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -608,8 +1111,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetCountriesLibraryQueryParamType).returns(::PlexRubySDK::Operations::GetCountriesLibraryResponse) } - def get_countries_library(section_key, type) + sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetCountriesLibraryQueryParamType, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetCountriesLibraryResponse) } + def get_countries_library(section_key, type, timeout_ms = nil) # get_countries_library - Get Countries of library media # Retrieves a list of all the countries that are found for the media in this library. # @@ -631,11 +1134,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-countries-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -665,8 +1218,8 @@ module PlexRubySDK end - sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetActorsLibraryQueryParamType).returns(::PlexRubySDK::Operations::GetActorsLibraryResponse) } - def get_actors_library(section_key, type) + sig { params(section_key: ::Integer, type: ::PlexRubySDK::Operations::GetActorsLibraryQueryParamType, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetActorsLibraryResponse) } + def get_actors_library(section_key, type, timeout_ms = nil) # get_actors_library - Get Actors of library media # Retrieves a list of all the actors that are found for the media in this library. # @@ -688,11 +1241,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-actors-library', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -722,8 +1325,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetSearchAllLibrariesRequest)).returns(::PlexRubySDK::Operations::GetSearchAllLibrariesResponse) } - def get_search_all_libraries(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetSearchAllLibrariesRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSearchAllLibrariesResponse) } + def get_search_all_libraries(request, timeout_ms = nil) # get_search_all_libraries - Search All Libraries # Search the provided query across all library sections, or a single section, and return matches as hubs, split up by type. # @@ -735,11 +1338,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-search-all-libraries', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -768,8 +1421,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetMediaMetaDataRequest)).returns(::PlexRubySDK::Operations::GetMediaMetaDataResponse) } - def get_media_meta_data(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetMediaMetaDataRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetMediaMetaDataResponse) } + def get_media_meta_data(request, timeout_ms = nil) # get_media_meta_data - Get Media Metadata # This endpoint will return all the (meta)data of a library item specified with by the ratingKey. # @@ -786,11 +1439,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-media-meta-data', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -820,8 +1523,8 @@ module PlexRubySDK end - sig { params(rating_key: ::Float, include_elements: T.nilable(::String)).returns(::PlexRubySDK::Operations::GetMetadataChildrenResponse) } - def get_metadata_children(rating_key, include_elements = nil) + sig { params(rating_key: ::Float, include_elements: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetMetadataChildrenResponse) } + def get_metadata_children(rating_key, include_elements = nil, timeout_ms = nil) # get_metadata_children - Get Items Children # This endpoint will return the children of of a library item specified with the ratingKey. # @@ -843,11 +1546,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getMetadataChildren', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -876,8 +1629,8 @@ module PlexRubySDK end - sig { params(type: ::PlexRubySDK::Operations::GetTopWatchedContentQueryParamType, include_guids: T.nilable(::Integer)).returns(::PlexRubySDK::Operations::GetTopWatchedContentResponse) } - def get_top_watched_content(type, include_guids = nil) + sig { params(type: ::PlexRubySDK::Operations::GetTopWatchedContentQueryParamType, include_guids: T.nilable(::Integer), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTopWatchedContentResponse) } + def get_top_watched_content(type, include_guids = nil, timeout_ms = nil) # get_top_watched_content - Get Top Watched Content # This endpoint will return the top watched content from libraries of a certain type # @@ -894,11 +1647,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTopWatchedContent', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/log.rb b/lib/plex_ruby_sdk/log.rb index c3fa5ec..9134aec 100644 --- a/lib/plex_ruby_sdk/log.rb +++ b/lib/plex_ruby_sdk/log.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(level: ::PlexRubySDK::Operations::Level, message: ::String, source: ::String).returns(::PlexRubySDK::Operations::LogLineResponse) } - def log_line(level, message, source) + sig { params(level: ::PlexRubySDK::Operations::Level, message: ::String, source: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::LogLineResponse) } + def log_line(level, message, source, timeout_ms = nil) # log_line - 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. # @@ -39,11 +42,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'logLine', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -68,8 +121,8 @@ module PlexRubySDK end - sig { params(request: ::String).returns(::PlexRubySDK::Operations::LogMultiLineResponse) } - def log_multi_line(request) + sig { params(request: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::LogMultiLineResponse) } + def log_multi_line(request, timeout_ms = nil) # log_multi_line - 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. @@ -100,19 +153,71 @@ module PlexRubySDK req_content_type, data, form = Utils.serialize_request_body(request, :request, :string) headers['content-type'] = req_content_type raise StandardError, 'request body is required' if data.nil? && form.nil? + + if form + body = Utils.encode_form(form) + elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded') + body = URI.encode_www_form(data) + else + body = data + end headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? - if form - req.body = Utils.encode_form(form) - elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded') - req.body = URI.encode_www_form(data) + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'logMultiLine', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.body = body + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) else - req.body = data + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' end end @@ -138,8 +243,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::EnablePaperTrailResponse) } - def enable_paper_trail + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::EnablePaperTrailResponse) } + def enable_paper_trail(timeout_ms = nil) # enable_paper_trail - Enabling Papertrail # This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time. # @@ -150,10 +255,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'enablePaperTrail', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/media.rb b/lib/plex_ruby_sdk/media.rb index 9547a87..485eb7e 100644 --- a/lib/plex_ruby_sdk/media.rb +++ b/lib/plex_ruby_sdk/media.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(key: ::Float).returns(::PlexRubySDK::Operations::MarkPlayedResponse) } - def mark_played(key) + sig { params(key: ::Float, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::MarkPlayedResponse) } + def mark_played(key, timeout_ms = nil) # mark_played - Mark Media Played # This will mark the provided media key as Played. request = ::PlexRubySDK::Operations::MarkPlayedRequest.new( @@ -36,11 +39,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'markPlayed', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -65,8 +118,8 @@ module PlexRubySDK end - sig { params(key: ::Float).returns(::PlexRubySDK::Operations::MarkUnplayedResponse) } - def mark_unplayed(key) + sig { params(key: ::Float, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::MarkUnplayedResponse) } + def mark_unplayed(key, timeout_ms = nil) # mark_unplayed - Mark Media Unplayed # This will mark the provided media key as Unplayed. request = ::PlexRubySDK::Operations::MarkUnplayedRequest.new( @@ -81,11 +134,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'markUnplayed', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -110,8 +213,8 @@ module PlexRubySDK end - sig { params(key: ::String, time: ::Float, state: ::String).returns(::PlexRubySDK::Operations::UpdatePlayProgressResponse) } - def update_play_progress(key, time, state) + sig { params(key: ::String, time: ::Float, state: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::UpdatePlayProgressResponse) } + def update_play_progress(key, time, state, timeout_ms = nil) # update_play_progress - Update Media Play Progress # This API command can be used to update the play progress of a media item. # @@ -129,11 +232,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'updatePlayProgress', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -158,8 +311,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetBannerImageRequest)).returns(::PlexRubySDK::Operations::GetBannerImageResponse) } - def get_banner_image(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetBannerImageRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetBannerImageResponse) } + def get_banner_image(request, timeout_ms = nil) # get_banner_image - Get Banner Image # Gets the banner image of the media item url, params = @sdk_configuration.get_server_details @@ -175,11 +328,61 @@ module PlexRubySDK headers['Accept'] = 'application/json;q=1, image/jpeg;q=0' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-banner-image', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -206,8 +409,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetThumbImageRequest)).returns(::PlexRubySDK::Operations::GetThumbImageResponse) } - def get_thumb_image(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetThumbImageRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetThumbImageResponse) } + def get_thumb_image(request, timeout_ms = nil) # get_thumb_image - Get Thumb Image # Gets the thumbnail image of the media item url, params = @sdk_configuration.get_server_details @@ -223,11 +426,61 @@ module PlexRubySDK headers['Accept'] = 'application/json;q=1, image/jpeg;q=0' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-thumb-image', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/playlists.rb b/lib/plex_ruby_sdk/playlists.rb index 2e339f4..01b00c2 100644 --- a/lib/plex_ruby_sdk/playlists.rb +++ b/lib/plex_ruby_sdk/playlists.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -23,8 +26,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::CreatePlaylistRequest)).returns(::PlexRubySDK::Operations::CreatePlaylistResponse) } - def create_playlist(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::CreatePlaylistRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::CreatePlaylistResponse) } + def create_playlist(request, timeout_ms = nil) # create_playlist - 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`). @@ -38,11 +41,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'createPlaylist', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -71,8 +124,8 @@ module PlexRubySDK end - sig { params(playlist_type: T.nilable(::PlexRubySDK::Operations::PlaylistType), smart: T.nilable(::PlexRubySDK::Operations::QueryParamSmart)).returns(::PlexRubySDK::Operations::GetPlaylistsResponse) } - def get_playlists(playlist_type = nil, smart = nil) + sig { params(playlist_type: T.nilable(::PlexRubySDK::Operations::PlaylistType), smart: T.nilable(::PlexRubySDK::Operations::QueryParamSmart), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetPlaylistsResponse) } + def get_playlists(playlist_type = nil, smart = nil, timeout_ms = nil) # get_playlists - Get All Playlists # Get All Playlists given the specified filters. request = ::PlexRubySDK::Operations::GetPlaylistsRequest.new( @@ -88,11 +141,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getPlaylists', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -121,8 +224,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float).returns(::PlexRubySDK::Operations::GetPlaylistResponse) } - def get_playlist(playlist_id) + sig { params(playlist_id: ::Float, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetPlaylistResponse) } + def get_playlist(playlist_id, timeout_ms = nil) # get_playlist - 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. @@ -143,10 +246,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getPlaylist', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -175,8 +328,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float).returns(::PlexRubySDK::Operations::DeletePlaylistResponse) } - def delete_playlist(playlist_id) + sig { params(playlist_id: ::Float, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::DeletePlaylistResponse) } + def delete_playlist(playlist_id, timeout_ms = nil) # delete_playlist - Deletes a Playlist # This endpoint will delete a playlist # @@ -196,10 +349,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'deletePlaylist', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -224,8 +427,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float, title: T.nilable(::String), summary: T.nilable(::String)).returns(::PlexRubySDK::Operations::UpdatePlaylistResponse) } - def update_playlist(playlist_id, title = nil, summary = nil) + sig { params(playlist_id: ::Float, title: T.nilable(::String), summary: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::UpdatePlaylistResponse) } + def update_playlist(playlist_id, title = nil, summary = nil, timeout_ms = nil) # update_playlist - 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}` # @@ -248,11 +451,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.put(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'updatePlaylist', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.put(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -277,8 +530,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float, type: ::PlexRubySDK::Operations::GetPlaylistContentsQueryParamType).returns(::PlexRubySDK::Operations::GetPlaylistContentsResponse) } - def get_playlist_contents(playlist_id, type) + sig { params(playlist_id: ::Float, type: ::PlexRubySDK::Operations::GetPlaylistContentsQueryParamType, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetPlaylistContentsResponse) } + def get_playlist_contents(playlist_id, type, timeout_ms = nil) # get_playlist_contents - 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. @@ -303,11 +556,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getPlaylistContents', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -336,8 +639,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float).returns(::PlexRubySDK::Operations::ClearPlaylistContentsResponse) } - def clear_playlist_contents(playlist_id) + sig { params(playlist_id: ::Float, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::ClearPlaylistContentsResponse) } + def clear_playlist_contents(playlist_id, timeout_ms = nil) # clear_playlist_contents - Delete Playlist Contents # Clears a playlist, only works with dumb playlists. Returns the playlist. # @@ -357,10 +660,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'clearPlaylistContents', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -385,8 +738,8 @@ module PlexRubySDK end - sig { params(playlist_id: ::Float, uri: ::String, play_queue_id: T.nilable(::Float)).returns(::PlexRubySDK::Operations::AddPlaylistContentsResponse) } - def add_playlist_contents(playlist_id, uri, play_queue_id = nil) + sig { params(playlist_id: ::Float, uri: ::String, play_queue_id: T.nilable(::Float), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::AddPlaylistContentsResponse) } + def add_playlist_contents(playlist_id, uri, play_queue_id = nil, timeout_ms = nil) # add_playlist_contents - 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. @@ -410,11 +763,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.put(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'addPlaylistContents', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.put(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -443,8 +846,8 @@ module PlexRubySDK end - sig { params(path: ::String, force: ::PlexRubySDK::Operations::QueryParamForce, section_id: ::Integer).returns(::PlexRubySDK::Operations::UploadPlaylistResponse) } - def upload_playlist(path, force, section_id) + sig { params(path: ::String, force: ::PlexRubySDK::Operations::QueryParamForce, section_id: ::Integer, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::UploadPlaylistResponse) } + def upload_playlist(path, force, section_id, timeout_ms = nil) # upload_playlist - 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. # @@ -462,11 +865,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'uploadPlaylist', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/plex.rb b/lib/plex_ruby_sdk/plex.rb index 873fd4e..fbbc67d 100644 --- a/lib/plex_ruby_sdk/plex.rb +++ b/lib/plex_ruby_sdk/plex.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -50,8 +53,8 @@ module PlexRubySDK end - sig { params(server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetCompanionsDataResponse) } - def get_companions_data(server_url = nil) + sig { params(server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetCompanionsDataResponse) } + def get_companions_data(server_url = nil, timeout_ms = nil) # get_companions_data - Get Companions Data # Get Companions Data base_url = Utils.template_url(GET_COMPANIONS_DATA_SERVERS[0], { @@ -62,10 +65,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getCompanionsData', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -94,8 +147,8 @@ module PlexRubySDK end - sig { params(server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetUserFriendsResponse) } - def get_user_friends(server_url = nil) + sig { params(server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetUserFriendsResponse) } + def get_user_friends(server_url = nil, timeout_ms = nil) # get_user_friends - Get list of friends of the user logged in # Get friends of provided auth token. base_url = Utils.template_url(GET_USER_FRIENDS_SERVERS[0], { @@ -106,10 +159,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getUserFriends', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -138,8 +241,8 @@ module PlexRubySDK end - sig { params(server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetGeoDataResponse) } - def get_geo_data(server_url = nil) + sig { params(server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetGeoDataResponse) } + def get_geo_data(server_url = nil, timeout_ms = nil) # get_geo_data - Get Geo Data # Returns the geolocation and locale data of the caller base_url = Utils.template_url(GET_GEO_DATA_SERVERS[0], { @@ -150,8 +253,57 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getGeoData', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -180,8 +332,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetHomeDataResponse) } - def get_home_data + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetHomeDataResponse) } + def get_home_data(timeout_ms = nil) # get_home_data - Get Plex Home Data # Retrieves the home data for the authenticated user, including details like home ID, name, guest access information, and subscription status. url, params = @sdk_configuration.get_server_details @@ -191,10 +343,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getHomeData', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -223,8 +425,8 @@ module PlexRubySDK end - sig { params(client_id: ::String, include_https: T.nilable(::PlexRubySDK::Operations::IncludeHttps), include_relay: T.nilable(::PlexRubySDK::Operations::IncludeRelay), include_i_pv6: T.nilable(::PlexRubySDK::Operations::IncludeIPv6), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetServerResourcesResponse) } - def get_server_resources(client_id, include_https = nil, include_relay = nil, include_i_pv6 = nil, server_url = nil) + sig { params(client_id: ::String, include_https: T.nilable(::PlexRubySDK::Operations::IncludeHttps), include_relay: T.nilable(::PlexRubySDK::Operations::IncludeRelay), include_i_pv6: T.nilable(::PlexRubySDK::Operations::IncludeIPv6), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerResourcesResponse) } + def get_server_resources(client_id, include_https = nil, include_relay = nil, include_i_pv6 = nil, server_url = nil, timeout_ms = nil) # get_server_resources - Get Server Resources # Get Plex server access tokens and server connections request = ::PlexRubySDK::Operations::GetServerResourcesRequest.new( @@ -243,11 +445,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-server-resources', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -276,8 +528,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetPinRequest), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetPinResponse) } - def get_pin(request, server_url = nil) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetPinRequest), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetPinResponse) } + def get_pin(request, server_url = nil, timeout_ms = nil) # get_pin - Get a Pin # Retrieve a Pin ID from Plex.tv to use for authentication flows base_url = Utils.template_url(GET_PIN_SERVERS[0], { @@ -289,9 +541,58 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.post(url) do |req| - req.headers = headers - req.params = query_params + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getPin', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.post(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -315,8 +616,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetTokenByPinIdRequest), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetTokenByPinIdResponse) } - def get_token_by_pin_id(request, server_url = nil) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetTokenByPinIdRequest), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTokenByPinIdResponse) } + def get_token_by_pin_id(request, server_url = nil, timeout_ms = nil) # get_token_by_pin_id - Get Access Token by PinId # Retrieve an Access Token from Plex.tv after the Pin has been authenticated base_url = Utils.template_url(GET_TOKEN_BY_PIN_ID_SERVERS[0], { @@ -332,8 +633,57 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTokenByPinId', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/plex_api.rb b/lib/plex_ruby_sdk/plex_api.rb index 2931fbb..dbcdc60 100644 --- a/lib/plex_ruby_sdk/plex_api.rb +++ b/lib/plex_ruby_sdk/plex_api.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -17,7 +20,9 @@ module PlexRubySDK sig do params( - client: T.nilable(Faraday::Request), + client: T.nilable(Faraday::Connection), + retry_config: T.nilable(::PlexRubySDK::Utils::RetryConfig), + timeout_ms: T.nilable(Integer), security: T.nilable(::PlexRubySDK::Shared::Security), security_source: T.nilable(T.proc.returns(::PlexRubySDK::Shared::Security)), protocol: T.nilable(::PlexRubySDK::ServerVariables::ServerProtocol), @@ -28,9 +33,11 @@ module PlexRubySDK url_params: T.nilable(T::Hash[Symbol, String]) ).void end - def initialize(client: nil, security: nil, security_source: nil, protocol: nil, ip: nil, port: nil, server_idx: nil, server_url: nil, url_params: nil) + def initialize(client: nil, retry_config: nil, timeout_ms: nil, security: nil, security_source: nil, protocol: nil, ip: nil, port: nil, server_idx: nil, server_url: nil, url_params: nil) ## Instantiates the SDK configuring it with the provided parameters. - # @param [T.nilable(Faraday::Request)] client The faraday HTTP client to use for all operations + # @param [T.nilable(Faraday::Connection)] client The faraday HTTP client to use for all operations + # @param [T.nilable(::PlexRubySDK::Utils::RetryConfig)] retry_config The retry configuration to use for all operations + # @param [T.nilable(Integer)] timeout_ms Request timeout in milliseconds for all operations # @param [T.nilable(::PlexRubySDK::Shared::Security)] security: The security details required for authentication # @param [T.proc.returns(T.nilable(::PlexRubySDK::Shared::Security))] security_source: A function that returns security details required for authentication # @param [T.nilable(::PlexRubySDK::ServerVariables::ServerProtocol)] protocol: Allows setting the protocol variable for url substitution @@ -40,13 +47,16 @@ module PlexRubySDK # @param [T.nilable(::String)] server_url The server URL to use for all operations # @param [T.nilable(::Hash<::Symbol, ::String>)] url_params Parameters to optionally template the server URL with - if client.nil? - client = Faraday.new(request: { - params_encoder: Faraday::FlatParamsEncoder - }) do |f| - f.request :multipart, {} - # f.response :logger - end + connection_options = { + request: { + params_encoder: Faraday::FlatParamsEncoder + } + } + connection_options[:request][:timeout] = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + + client ||= Faraday.new(**connection_options) do |f| + f.request :multipart, {} + # f.response :logger, nil, { headers: true, bodies: true, errors: true } end if !server_url.nil? @@ -71,14 +81,23 @@ module PlexRubySDK port: port || '32400', }, ] + hooks = SDKHooks::Hooks.new @sdk_configuration = SDKConfiguration.new( client, + hooks, + retry_config, + timeout_ms, security, security_source, server_url, server_idx, server_params ) + + original_server_url = @sdk_configuration.get_server_details.first + new_server_url, @sdk_configuration.client = hooks.sdk_init(base_url: original_server_url, client: client) + @sdk_configuration.server_url = new_server_url if new_server_url != original_server_url + init_sdks end diff --git a/lib/plex_ruby_sdk/sdk_hooks/hooks.rb b/lib/plex_ruby_sdk/sdk_hooks/hooks.rb new file mode 100644 index 0000000..357819f --- /dev/null +++ b/lib/plex_ruby_sdk/sdk_hooks/hooks.rb @@ -0,0 +1,103 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + +require_relative './registration' +require_relative './types' + +require 'sorbet-runtime' + +module PlexRubySDK + module SDKHooks + class Hooks + extend T::Sig + + sig { void } + def initialize + @sdk_init_hooks = T.let([], T::Array[AbstractSDKInitHook]) + @before_request_hooks = T.let([], T::Array[AbstractBeforeRequestHook]) + @after_success_hooks = T.let([], T::Array[AbstractAfterSuccessHook]) + @after_error_hooks = T.let([], T::Array[AbstractAfterErrorHook]) + Registration.init_hooks self + end + + sig { params(hook: AbstractSDKInitHook).void } + def register_sdk_init_hook(hook) + @sdk_init_hooks << hook + end + + sig { params(hook: AbstractBeforeRequestHook).void } + def register_before_request_hook(hook) + @before_request_hooks << hook + end + + sig { params(hook: AbstractAfterSuccessHook).void } + def register_after_success_hook(hook) + @after_success_hooks << hook + end + + sig { params(hook: AbstractAfterErrorHook).void } + def register_after_error_hook(hook) + @after_error_hooks << hook + end + + sig do + params( + base_url: String, + client: Faraday::Connection + ).returns([String, Faraday::Connection]) + end + def sdk_init(base_url:, client:) + @sdk_init_hooks.each do |hook| + base_url, client = hook.sdk_init(base_url: base_url, client: client) + end + + return base_url, client + end + + sig do + params( + hook_ctx: BeforeRequestHookContext, + request: Faraday::Request + ).returns(Faraday::Request) + end + def before_request(hook_ctx:, request:) + @before_request_hooks.each do |hook| + request = hook.before_request(hook_ctx: hook_ctx, request: request) + end + + request + end + + sig do + params( + hook_ctx: AfterSuccessHookContext, + response: Faraday::Response + ).returns(Faraday::Response) + end + def after_success(hook_ctx:, response:) + @after_success_hooks.each do |hook| + response = hook.after_success(hook_ctx: hook_ctx, response: response) + end + + response + end + + sig do + params( + error: T.nilable(StandardError), + hook_ctx: AfterErrorHookContext, + response: T.nilable(Faraday::Response) + ).returns(T.nilable(Faraday::Response)) + end + def after_error(error:, hook_ctx:, response:) + @after_error_hooks.each do |hook| + response = hook.after_error(error: error, hook_ctx: hook_ctx, response: response) + end + + response + end + end + end +end diff --git a/lib/plex_ruby_sdk/sdk_hooks/registration.rb b/lib/plex_ruby_sdk/sdk_hooks/registration.rb new file mode 100644 index 0000000..3bcc575 --- /dev/null +++ b/lib/plex_ruby_sdk/sdk_hooks/registration.rb @@ -0,0 +1,35 @@ +# typed: true +# frozen_string_literal: true + +# +# This file is only ever generated once on the first generation and then is free to be modified. +# Any hooks you wish to add should be registered in the init_hooks method. +# +# Hooks are registered per SDK instance, and are valid for the lifetime of the SDK instance. +# + +require_relative './types' + +require 'sorbet-runtime' + +module PlexRubySDK + module SDKHooks + class Registration + extend T::Sig + + sig do + params( + hooks: Hooks + ).void + end + def self.init_hooks(hooks) + # example_hook = ExampleHook.new + + # hooks.register_sdk_init_hook example_hook + # hooks.register_before_request_hook example_hook + # hooks.register_after_error_hook example_hook + # hooks.register_after_success_hook example_hook + end + end + end +end diff --git a/lib/plex_ruby_sdk/sdk_hooks/types.rb b/lib/plex_ruby_sdk/sdk_hooks/types.rb new file mode 100644 index 0000000..8cf7943 --- /dev/null +++ b/lib/plex_ruby_sdk/sdk_hooks/types.rb @@ -0,0 +1,152 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + +require 'sorbet-runtime' + +module PlexRubySDK + module SDKHooks + class HookContext + extend T::Sig + + sig { returns(String) } + attr_accessor :base_url + + sig { returns(T.nilable(T::Array[String])) } + attr_accessor :oauth2_scopes + + sig { returns(String) } + attr_accessor :operation_id + + sig { returns(T.nilable(T.proc.returns(T.untyped))) } + attr_accessor :security_source + + sig do + params( + base_url: String, + oauth2_scopes: T.nilable(T::Array[String]), + operation_id: String, + security_source: T.nilable(T.proc.returns(T.untyped)) + ).void + end + def initialize(base_url:, oauth2_scopes:, operation_id:, security_source:) + @base_url = T.let(base_url, String) + @oauth2_scopes = T.let(oauth2_scopes, T.nilable(T::Array[String])) + @operation_id = T.let(operation_id, String) + @security_source = T.let(security_source, T.nilable(T.proc.returns(T.untyped))) + end + end + + class BeforeRequestHookContext < HookContext + extend T::Sig + + sig do + params( + hook_ctx: HookContext + ).void + end + def initialize(hook_ctx:) + super( + base_url: hook_ctx.base_url, + operation_id: hook_ctx.operation_id, + oauth2_scopes: hook_ctx.oauth2_scopes, + security_source: hook_ctx.security_source + ) + end + end + + class AfterSuccessHookContext < HookContext + extend T::Sig + + sig do + params( + hook_ctx: HookContext + ).void + end + def initialize(hook_ctx:) + super( + base_url: hook_ctx.base_url, + operation_id: hook_ctx.operation_id, + oauth2_scopes: hook_ctx.oauth2_scopes, + security_source: hook_ctx.security_source + ) + end + end + + class AfterErrorHookContext < HookContext + extend T::Sig + + sig do + params( + hook_ctx: HookContext + ).void + end + def initialize(hook_ctx:) + super( + base_url: hook_ctx.base_url, + operation_id: hook_ctx.operation_id, + oauth2_scopes: hook_ctx.oauth2_scopes, + security_source: hook_ctx.security_source + ) + end + end + + module AbstractSDKInitHook + extend T::Sig + extend T::Helpers + abstract! + + sig do + abstract.params( + base_url: String, + client: Faraday::Connection + ).returns([String, Faraday::Connection]) + end + def sdk_init(base_url:, client:); end + end + + module AbstractBeforeRequestHook + extend T::Sig + extend T::Helpers + abstract! + + sig do + abstract.params( + hook_ctx: BeforeRequestHookContext, + request: Faraday::Request + ).returns(Faraday::Request) + end + def before_request(hook_ctx:, request:); end + end + + module AbstractAfterSuccessHook + extend T::Sig + extend T::Helpers + abstract! + + sig do + abstract.params( + hook_ctx: AfterSuccessHookContext, + response: Faraday::Response + ).returns(Faraday::Response) + end + def after_success(hook_ctx:, response:); end + end + + module AbstractAfterErrorHook + extend T::Sig + extend T::Helpers + abstract! + + sig do + abstract.params( + error: T.nilable(StandardError), + hook_ctx: AfterErrorHookContext, + response: T.nilable(Faraday::Response) + ).returns(T.nilable(Faraday::Response)) + end + def after_error(error:, hook_ctx:, response:); end + end + end +end diff --git a/lib/plex_ruby_sdk/sdkconfiguration.rb b/lib/plex_ruby_sdk/sdkconfiguration.rb index e3c7e9f..78be55f 100644 --- a/lib/plex_ruby_sdk/sdkconfiguration.rb +++ b/lib/plex_ruby_sdk/sdkconfiguration.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -19,6 +22,9 @@ module PlexRubySDK extend T::Sig field :client, T.nilable(Faraday::Connection) + field :hooks, ::PlexRubySDK::SDKHooks::Hooks + field :retry_config, T.nilable(::PlexRubySDK::Utils::RetryConfig) + field :timeout, T.nilable(Float) field :security_source, T.nilable(T.proc.returns(T.nilable(::PlexRubySDK::Shared::Security))) field :server_url, T.nilable(String) field :server_idx, T.nilable(Integer) @@ -29,12 +35,25 @@ module PlexRubySDK field :gen_version, String field :user_agent, String - - - sig { params(client: T.nilable(Faraday::Connection), security: T.nilable(::PlexRubySDK::Shared::Security), security_source: T.nilable(T.proc.returns(::PlexRubySDK::Shared::Security)), server_url: T.nilable(String), server_idx: T.nilable(Integer), server_params: T::Array[String]).void } - def initialize(client, security, security_source, server_url, server_idx, server_params) + sig do + params( + client: T.nilable(Faraday::Connection), + hooks: ::PlexRubySDK::SDKHooks::Hooks, + retry_config: T.nilable(::PlexRubySDK::Utils::RetryConfig), + timeout_ms: T.nilable(Integer), + security: T.nilable(::PlexRubySDK::Shared::Security), + security_source: T.nilable(T.proc.returns(::PlexRubySDK::Shared::Security)), + server_url: T.nilable(String), + server_idx: T.nilable(Integer), + server_params: T::Array[String] + ).void + end + def initialize(client, hooks, retry_config, timeout_ms, security, security_source, server_url, server_idx, server_params) @client = client + @hooks = hooks + @retry_config = retry_config @server_url = server_url + @timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? @server_idx = server_idx.nil? ? 0 : server_idx raise StandardError, "Invalid server index #{server_idx}" if @server_idx.negative? || @server_idx >= SERVERS.length @server_params = server_params @@ -45,9 +64,9 @@ module PlexRubySDK end @language = 'ruby' @openapi_doc_version = '0.0.3' - @sdk_version = '0.7.7' - @gen_version = '2.545.4' - @user_agent = 'speakeasy-sdk/ruby 0.7.7 2.545.4 0.0.3 plex_ruby_sdk' + @sdk_version = '0.8.0' + @gen_version = '2.563.1' + @user_agent = 'speakeasy-sdk/ruby 0.8.0 2.563.1 0.0.3 plex_ruby_sdk' end sig { returns([String, T::Hash[Symbol, String]]) } diff --git a/lib/plex_ruby_sdk/search.rb b/lib/plex_ruby_sdk/search.rb index cd7c76a..fe848a8 100644 --- a/lib/plex_ruby_sdk/search.rb +++ b/lib/plex_ruby_sdk/search.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(query: ::String, section_id: T.nilable(::Float), limit: T.nilable(::Float)).returns(::PlexRubySDK::Operations::PerformSearchResponse) } - def perform_search(query, section_id = nil, limit = nil) + sig { params(query: ::String, section_id: T.nilable(::Float), limit: T.nilable(::Float), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::PerformSearchResponse) } + def perform_search(query, section_id = nil, limit = nil, timeout_ms = nil) # perform_search - 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). # @@ -50,11 +53,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'performSearch', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -79,8 +132,8 @@ module PlexRubySDK end - sig { params(query: ::String, section_id: T.nilable(::Float), limit: T.nilable(::Float)).returns(::PlexRubySDK::Operations::PerformVoiceSearchResponse) } - def perform_voice_search(query, section_id = nil, limit = nil) + sig { params(query: ::String, section_id: T.nilable(::Float), limit: T.nilable(::Float), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::PerformVoiceSearchResponse) } + def perform_voice_search(query, section_id = nil, limit = nil, timeout_ms = nil) # perform_voice_search - 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. @@ -101,11 +154,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'performVoiceSearch', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -130,8 +233,8 @@ module PlexRubySDK end - sig { params(query: ::String).returns(::PlexRubySDK::Operations::GetSearchResultsResponse) } - def get_search_results(query) + sig { params(query: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSearchResultsResponse) } + def get_search_results(query, timeout_ms = nil) # get_search_results - Get Search Results # This will search the database for the string provided. request = ::PlexRubySDK::Operations::GetSearchResultsRequest.new( @@ -146,11 +249,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getSearchResults', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/server.rb b/lib/plex_ruby_sdk/server.rb index 58e1819..bcecd63 100644 --- a/lib/plex_ruby_sdk/server.rb +++ b/lib/plex_ruby_sdk/server.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetServerCapabilitiesResponse) } - def get_server_capabilities + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerCapabilitiesResponse) } + def get_server_capabilities(timeout_ms = nil) # get_server_capabilities - Get Server Capabilities # Get Server Capabilities url, params = @sdk_configuration.get_server_details @@ -31,10 +34,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getServerCapabilities', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -63,8 +116,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetServerPreferencesResponse) } - def get_server_preferences + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerPreferencesResponse) } + def get_server_preferences(timeout_ms = nil) # get_server_preferences - Get Server Preferences # Get Server Preferences url, params = @sdk_configuration.get_server_details @@ -74,10 +127,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getServerPreferences', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -106,8 +209,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetAvailableClientsResponse) } - def get_available_clients + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetAvailableClientsResponse) } + def get_available_clients(timeout_ms = nil) # get_available_clients - Get Available Clients # Get Available Clients url, params = @sdk_configuration.get_server_details @@ -117,10 +220,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getAvailableClients', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -149,8 +302,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetDevicesResponse) } - def get_devices + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetDevicesResponse) } + def get_devices(timeout_ms = nil) # get_devices - Get Devices # Get Devices url, params = @sdk_configuration.get_server_details @@ -160,10 +313,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getDevices', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -192,8 +395,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetServerIdentityResponse) } - def get_server_identity + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerIdentityResponse) } + def get_server_identity(timeout_ms = nil) # get_server_identity - Get Server Identity # This request is useful to determine if the server is online or offline url, params = @sdk_configuration.get_server_details @@ -203,8 +406,57 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-server-identity', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -228,8 +480,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetMyPlexAccountResponse) } - def get_my_plex_account + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetMyPlexAccountResponse) } + def get_my_plex_account(timeout_ms = nil) # get_my_plex_account - Get MyPlex Account # Returns MyPlex Account Information url, params = @sdk_configuration.get_server_details @@ -239,10 +491,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getMyPlexAccount', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -271,8 +573,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetResizedPhotoRequest)).returns(::PlexRubySDK::Operations::GetResizedPhotoResponse) } - def get_resized_photo(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetResizedPhotoRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetResizedPhotoResponse) } + def get_resized_photo(request, timeout_ms = nil) # get_resized_photo - Get a Resized Photo # Plex's Photo transcoder is used throughout the service to serve images at specified sizes. # @@ -284,11 +586,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getResizedPhoto', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -313,8 +665,8 @@ module PlexRubySDK end - sig { params(x_plex_token: ::String).returns(::PlexRubySDK::Operations::GetMediaProvidersResponse) } - def get_media_providers(x_plex_token) + sig { params(x_plex_token: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetMediaProvidersResponse) } + def get_media_providers(x_plex_token, timeout_ms = nil) # get_media_providers - Get Media Providers # Retrieves media providers and their features from the Plex server. request = ::PlexRubySDK::Operations::GetMediaProvidersRequest.new( @@ -328,10 +680,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-media-providers', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -360,8 +762,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetServerListResponse) } - def get_server_list + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetServerListResponse) } + def get_server_list(timeout_ms = nil) # get_server_list - Get Server List # Get Server List url, params = @sdk_configuration.get_server_details @@ -371,10 +773,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getServerList', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/sessions.rb b/lib/plex_ruby_sdk/sessions.rb index 68cff14..e59054b 100644 --- a/lib/plex_ruby_sdk/sessions.rb +++ b/lib/plex_ruby_sdk/sessions.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetSessionsResponse) } - def get_sessions + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSessionsResponse) } + def get_sessions(timeout_ms = nil) # get_sessions - Get Active Sessions # This will retrieve the "Now Playing" Information of the PMS. url, params = @sdk_configuration.get_server_details @@ -31,10 +34,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getSessions', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -63,8 +116,8 @@ module PlexRubySDK end - sig { params(sort: T.nilable(::String), account_id: T.nilable(::Integer), filter: T.nilable(::PlexRubySDK::Operations::QueryParamFilter), library_section_id: T.nilable(::Integer)).returns(::PlexRubySDK::Operations::GetSessionHistoryResponse) } - def get_session_history(sort = nil, account_id = nil, filter = nil, library_section_id = nil) + sig { params(sort: T.nilable(::String), account_id: T.nilable(::Integer), filter: T.nilable(::PlexRubySDK::Operations::QueryParamFilter), library_section_id: T.nilable(::Integer), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetSessionHistoryResponse) } + def get_session_history(sort = nil, account_id = nil, filter = nil, library_section_id = nil, timeout_ms = nil) # get_session_history - Get Session History # This will Retrieve a listing of all history views. request = ::PlexRubySDK::Operations::GetSessionHistoryRequest.new( @@ -82,11 +135,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getSessionHistory', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -115,8 +218,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetTranscodeSessionsResponse) } - def get_transcode_sessions + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTranscodeSessionsResponse) } + def get_transcode_sessions(timeout_ms = nil) # get_transcode_sessions - Get Transcode Sessions # Get Transcode Sessions url, params = @sdk_configuration.get_server_details @@ -126,10 +229,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTranscodeSessions', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -158,8 +311,8 @@ module PlexRubySDK end - sig { params(session_key: ::String).returns(::PlexRubySDK::Operations::StopTranscodeSessionResponse) } - def stop_transcode_session(session_key) + sig { params(session_key: ::String, timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StopTranscodeSessionResponse) } + def stop_transcode_session(session_key, timeout_ms = nil) # stop_transcode_session - Stop a Transcode Session # Stop a Transcode Session request = ::PlexRubySDK::Operations::StopTranscodeSessionRequest.new( @@ -178,10 +331,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.delete(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'stopTranscodeSession', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.delete(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/statistics.rb b/lib/plex_ruby_sdk/statistics.rb index ba54b9d..65d975f 100644 --- a/lib/plex_ruby_sdk/statistics.rb +++ b/lib/plex_ruby_sdk/statistics.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(timespan: T.nilable(::Integer)).returns(::PlexRubySDK::Operations::GetStatisticsResponse) } - def get_statistics(timespan = nil) + sig { params(timespan: T.nilable(::Integer), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetStatisticsResponse) } + def get_statistics(timespan = nil, timeout_ms = nil) # get_statistics - Get Media Statistics # This will return the media statistics for the server request = ::PlexRubySDK::Operations::GetStatisticsRequest.new( @@ -36,11 +39,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getStatistics', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -69,8 +122,8 @@ module PlexRubySDK end - sig { params(timespan: T.nilable(::Integer)).returns(::PlexRubySDK::Operations::GetResourcesStatisticsResponse) } - def get_resources_statistics(timespan = nil) + sig { params(timespan: T.nilable(::Integer), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetResourcesStatisticsResponse) } + def get_resources_statistics(timespan = nil, timeout_ms = nil) # get_resources_statistics - Get Resources Statistics # This will return the resources for the server request = ::PlexRubySDK::Operations::GetResourcesStatisticsRequest.new( @@ -85,11 +138,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getResourcesStatistics', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -118,8 +221,8 @@ module PlexRubySDK end - sig { params(timespan: T.nilable(::Integer)).returns(::PlexRubySDK::Operations::GetBandwidthStatisticsResponse) } - def get_bandwidth_statistics(timespan = nil) + sig { params(timespan: T.nilable(::Integer), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetBandwidthStatisticsResponse) } + def get_bandwidth_statistics(timespan = nil, timeout_ms = nil) # get_bandwidth_statistics - Get Bandwidth Statistics # This will return the bandwidth statistics for the server request = ::PlexRubySDK::Operations::GetBandwidthStatisticsRequest.new( @@ -134,11 +237,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getBandwidthStatistics', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/updater.rb b/lib/plex_ruby_sdk/updater.rb index 126d6ab..04a3eff 100644 --- a/lib/plex_ruby_sdk/updater.rb +++ b/lib/plex_ruby_sdk/updater.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -21,8 +24,8 @@ module PlexRubySDK end - sig { returns(::PlexRubySDK::Operations::GetUpdateStatusResponse) } - def get_update_status + sig { params(timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetUpdateStatusResponse) } + def get_update_status(timeout_ms = nil) # get_update_status - Querying status of updates # Querying status of updates url, params = @sdk_configuration.get_server_details @@ -32,10 +35,60 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getUpdateStatus', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -64,8 +117,8 @@ module PlexRubySDK end - sig { params(download: T.nilable(::PlexRubySDK::Operations::Download)).returns(::PlexRubySDK::Operations::CheckForUpdatesResponse) } - def check_for_updates(download = nil) + sig { params(download: T.nilable(::PlexRubySDK::Operations::Download), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::CheckForUpdatesResponse) } + def check_for_updates(download = nil, timeout_ms = nil) # check_for_updates - Checking for updates # Checking for updates request = ::PlexRubySDK::Operations::CheckForUpdatesRequest.new( @@ -80,11 +133,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.put(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'checkForUpdates', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.put(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -109,8 +212,8 @@ module PlexRubySDK end - sig { params(tonight: T.nilable(::PlexRubySDK::Operations::Tonight), skip: T.nilable(::PlexRubySDK::Operations::Skip)).returns(::PlexRubySDK::Operations::ApplyUpdatesResponse) } - def apply_updates(tonight = nil, skip = nil) + sig { params(tonight: T.nilable(::PlexRubySDK::Operations::Tonight), skip: T.nilable(::PlexRubySDK::Operations::Skip), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::ApplyUpdatesResponse) } + def apply_updates(tonight = nil, skip = nil, timeout_ms = nil) # apply_updates - 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 # @@ -127,11 +230,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.put(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'applyUpdates', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.put(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/users.rb b/lib/plex_ruby_sdk/users.rb index 3d61fee..bb2b2a9 100644 --- a/lib/plex_ruby_sdk/users.rb +++ b/lib/plex_ruby_sdk/users.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -24,8 +27,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetUsersRequest), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetUsersResponse) } - def get_users(request, server_url = nil) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetUsersRequest), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetUsersResponse) } + def get_users(request, server_url = nil, timeout_ms = nil) # get_users - Get list of all connected users # Get list of all users that are friends and have library access with the provided Plex authentication token base_url = Utils.template_url(GET_USERS_SERVERS[0], { @@ -36,8 +39,57 @@ module PlexRubySDK headers['Accept'] = 'application/json;q=1, application/xml;q=0' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-users', + security_source: nil + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/utils/retries.rb b/lib/plex_ruby_sdk/utils/retries.rb new file mode 100644 index 0000000..e31dc06 --- /dev/null +++ b/lib/plex_ruby_sdk/utils/retries.rb @@ -0,0 +1,95 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + +require 'faraday/retry' +require 'sorbet-runtime' + +module PlexRubySDK + module Utils + class BackoffStrategy + extend T::Sig + + sig { returns(T.nilable(::Float)) } + attr_accessor :exponent + + sig { returns(T.nilable(::Integer)) } + attr_accessor :initial_interval + + sig { returns(T.nilable(::Integer)) } + attr_accessor :max_elapsed_time + + sig { returns(T.nilable(::Integer)) } + attr_accessor :max_interval + + sig do + params( + exponent: T.nilable(::Float), + initial_interval: T.nilable(::Integer), + max_elapsed_time: T.nilable(::Integer), + max_interval: T.nilable(::Integer) + ).void + end + def initialize(exponent: nil, initial_interval: nil, max_elapsed_time: nil, max_interval: nil) + @exponent = T.let(exponent, T.nilable(::Float)) + @initial_interval = T.let(initial_interval, T.nilable(::Integer)) + @max_elapsed_time = T.let(max_elapsed_time, T.nilable(::Integer)) + @max_interval = T.let(max_interval, T.nilable(::Integer)) + end + end + + class RetryConfig + extend T::Sig + + sig { returns(T.nilable(BackoffStrategy)) } + attr_accessor :backoff + + sig { returns(T.nilable(T::Boolean)) } + attr_accessor :retry_connection_errors + + sig { returns(T.nilable(::String)) } + attr_accessor :strategy + + sig do + params( + backoff: T.nilable(BackoffStrategy), + retry_connection_errors: T.nilable(T::Boolean), + strategy: T.nilable(::String) + ).void + end + def initialize(backoff: nil, retry_connection_errors: nil, strategy: nil) + @backoff = T.let(backoff, T.nilable(BackoffStrategy)) + @retry_connection_errors = T.let(retry_connection_errors, T.nilable(T::Boolean)) + @strategy = T.let(strategy, T.nilable(::String)) + end + + sig { params(initial_time: ::Time).returns(::Hash) } + def to_faraday_retry_options(initial_time:) + retry_options = { + # must overwrite default max of 2 retries and it must be positive + max: 1_000_000_000, + # ensure all HTTP methods are retried, especially via retry_if + methods: [], + } + + if @retry_connection_errors + retry_options[:exceptions] = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed] + end + + if @strategy == 'backoff' && @backoff + retry_options[:backoff_factor] = @backoff.exponent unless @backoff.exponent.nil? + retry_options[:interval] = (@backoff.initial_interval.to_f / 1000) unless @backoff.initial_interval.nil? + retry_options[:max_interval] = @backoff.max_interval unless @backoff.max_interval.nil? + + unless @backoff.max_elapsed_time.nil? + stop_time = initial_time + (@backoff.max_elapsed_time.to_f / 1000) + retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time } + end + end + + retry_options + end + end + end +end diff --git a/lib/plex_ruby_sdk/utils/utils.rb b/lib/plex_ruby_sdk/utils/utils.rb index b7bcbb4..0d6aa00 100644 --- a/lib/plex_ruby_sdk/utils/utils.rb +++ b/lib/plex_ruby_sdk/utils/utils.rb @@ -351,6 +351,15 @@ module PlexRubySDK server_url.delete_suffix('/') + path end + sig { params(status: Integer).returns(T::Boolean) } + def self.error_status?(status) + status_major = status / 100 + return true if status_major == 4 + return true if status_major == 5 + + false + end + sig { params(content_type: String, pattern: String).returns(T::Boolean) } def self.match_content_type(content_type, pattern) return true if content_type == pattern || ['*', '*/*'].include?(pattern) @@ -365,6 +374,7 @@ module PlexRubySDK sig { params(req: Faraday::Request, security: Object).void } def self.configure_request_security(req, security) + return if security.nil? sec_fields = security.fields sec_fields.each do |sec_field| value = security.send(sec_field.name) diff --git a/lib/plex_ruby_sdk/video.rb b/lib/plex_ruby_sdk/video.rb index 1a29dc9..0c364ac 100644 --- a/lib/plex_ruby_sdk/video.rb +++ b/lib/plex_ruby_sdk/video.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -20,8 +23,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetTimelineRequest)).returns(::PlexRubySDK::Operations::GetTimelineResponse) } - def get_timeline(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetTimelineRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetTimelineResponse) } + def get_timeline(request, timeout_ms = nil) # get_timeline - Get the timeline for a media item # Get the timeline for a media item url, params = @sdk_configuration.get_server_details @@ -32,11 +35,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'getTimeline', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') @@ -61,8 +114,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::StartUniversalTranscodeRequest)).returns(::PlexRubySDK::Operations::StartUniversalTranscodeResponse) } - def start_universal_transcode(request) + sig { params(request: T.nilable(::PlexRubySDK::Operations::StartUniversalTranscodeRequest), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::StartUniversalTranscodeResponse) } + def start_universal_transcode(request, timeout_ms = nil) # start_universal_transcode - Start Universal Transcode # Begin a Universal Transcode Session url, params = @sdk_configuration.get_server_details @@ -73,11 +126,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'startUniversalTranscode', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/lib/plex_ruby_sdk/watchlist.rb b/lib/plex_ruby_sdk/watchlist.rb index 175da05..d7575b6 100644 --- a/lib/plex_ruby_sdk/watchlist.rb +++ b/lib/plex_ruby_sdk/watchlist.rb @@ -5,7 +5,10 @@ require 'faraday' require 'faraday/multipart' +require 'faraday/retry' require 'sorbet-runtime' +require_relative 'sdk_hooks/hooks' +require_relative 'utils/retries' module PlexRubySDK extend T::Sig @@ -25,8 +28,8 @@ module PlexRubySDK end - sig { params(request: T.nilable(::PlexRubySDK::Operations::GetWatchListRequest), server_url: T.nilable(String)).returns(::PlexRubySDK::Operations::GetWatchListResponse) } - def get_watch_list(request, server_url = nil) + sig { params(request: T.nilable(::PlexRubySDK::Operations::GetWatchListRequest), server_url: T.nilable(String), timeout_ms: T.nilable(Integer)).returns(::PlexRubySDK::Operations::GetWatchListResponse) } + def get_watch_list(request, server_url = nil, timeout_ms = nil) # get_watch_list - Get User Watchlist # Get User Watchlist base_url = Utils.template_url(GET_WATCH_LIST_SERVERS[0], { @@ -43,11 +46,61 @@ module PlexRubySDK headers['Accept'] = 'application/json' headers['user-agent'] = @sdk_configuration.user_agent - r = @sdk_configuration.client.get(url) do |req| - req.headers = headers - req.params = query_params - security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil - Utils.configure_request_security(req, security) if !security.nil? + security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'get-watch-list', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + r = T.let(nil, T.nilable(Faraday::Response)) + + begin + r = connection.get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if r.nil? || Utils.error_status?(r.status) + r = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + else + r = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: r + ) + end + + if r.nil? + raise error if !error.nil? + raise 'no response' + end end content_type = r.headers.fetch('Content-Type', 'application/octet-stream') diff --git a/plex_ruby_sdk.gemspec b/plex_ruby_sdk.gemspec index 8dfb9a0..4b88100 100644 --- a/plex_ruby_sdk.gemspec +++ b/plex_ruby_sdk.gemspec @@ -4,7 +4,7 @@ $LOAD_PATH.push File.expand_path('lib', __dir__) Gem::Specification.new do |s| s.name = 'plex_ruby_sdk' - s.version = '0.7.7' + s.version = '0.8.0' s.platform = Gem::Platform::RUBY s.licenses = ['Apache-2.0'] s.summary = '' @@ -23,14 +23,14 @@ Gem::Specification.new do |s| s.add_dependency('faraday') s.add_dependency('faraday-multipart') + s.add_dependency('faraday-retry', '~> 2.2.1') s.add_dependency('rack') s.add_dependency('rake') s.add_dependency('sorbet-runtime') - - s.add_development_dependency('minitest') s.add_development_dependency('minitest-focus') - s.add_development_dependency('rubocop', '~> 1.60.2') + s.add_development_dependency('rubocop', '~> 1.73.2') + s.add_development_dependency('rubocop-minitest', '~> 0.37.1') s.add_development_dependency('sorbet') s.add_development_dependency('tapioca') end diff --git a/sorbet/rbi/gems/faraday-retry@2.2.1.rbi b/sorbet/rbi/gems/faraday-retry@2.2.1.rbi new file mode 100644 index 0000000..7a8c41a --- /dev/null +++ b/sorbet/rbi/gems/faraday-retry@2.2.1.rbi @@ -0,0 +1,207 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `faraday-retry` gem. +# Please instead update this file by running `bin/tapioca gem faraday-retry`. + +# Faraday namespace. +# +# source://faraday-retry//lib/faraday/retriable_response.rb#4 +module Faraday + class << self + # source://faraday/2.12.2/lib/faraday.rb#55 + def default_adapter; end + + # source://faraday/2.12.2/lib/faraday.rb#102 + def default_adapter=(adapter); end + + # source://faraday/2.12.2/lib/faraday.rb#59 + def default_adapter_options; end + + # source://faraday/2.12.2/lib/faraday.rb#59 + def default_adapter_options=(_arg0); end + + # source://faraday/2.12.2/lib/faraday.rb#120 + def default_connection; end + + # source://faraday/2.12.2/lib/faraday.rb#62 + def default_connection=(_arg0); end + + # source://faraday/2.12.2/lib/faraday.rb#127 + def default_connection_options; end + + # source://faraday/2.12.2/lib/faraday.rb#134 + def default_connection_options=(options); end + + # source://faraday/2.12.2/lib/faraday.rb#67 + def ignore_env_proxy; end + + # source://faraday/2.12.2/lib/faraday.rb#67 + def ignore_env_proxy=(_arg0); end + + # source://faraday/2.12.2/lib/faraday.rb#46 + def lib_path; end + + # source://faraday/2.12.2/lib/faraday.rb#46 + def lib_path=(_arg0); end + + # source://faraday/2.12.2/lib/faraday.rb#96 + def new(url = T.unsafe(nil), options = T.unsafe(nil), &block); end + + # source://faraday/2.12.2/lib/faraday.rb#107 + def respond_to_missing?(symbol, include_private = T.unsafe(nil)); end + + # source://faraday/2.12.2/lib/faraday.rb#42 + def root_path; end + + # source://faraday/2.12.2/lib/faraday.rb#42 + def root_path=(_arg0); end + + private + + # source://faraday/2.12.2/lib/faraday.rb#143 + def method_missing(name, *args, &block); end + end +end + +# Exception used to control the Retry middleware. +# +# source://faraday-retry//lib/faraday/retriable_response.rb#6 +class Faraday::RetriableResponse < ::Faraday::Error; end + +# Middleware main module. +# +# source://faraday-retry//lib/faraday/retry/middleware.rb#4 +module Faraday::Retry; end + +# This class provides the main implementation for your middleware. +# Your middleware can implement any of the following methods: +# * on_request - called when the request is being prepared +# * on_complete - called when the response is being processed +# +# Optionally, you can also override the following methods from Faraday::Middleware +# * initialize(app, options = {}) - the initializer method +# * call(env) - the main middleware invocation method. +# This already calls on_request and on_complete, so you normally don't need to override it. +# You may need to in case you need to "wrap" the request or need more control +# (see "retry" middleware: https://github.com/lostisland/faraday/blob/main/lib/faraday/request/retry.rb#L142). +# IMPORTANT: Remember to call `@app.call(env)` or `super` to not interrupt the middleware chain! +# +# source://faraday-retry//lib/faraday/retry/middleware.rb#17 +class Faraday::Retry::Middleware < ::Faraday::Middleware + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @option options + # @param app [#call] + # @param options [Hash] + # @return [Middleware] a new instance of Middleware + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#127 + def initialize(app, options = T.unsafe(nil)); end + + # An exception matcher for the rescue clause can usually be any object + # that responds to `===`, but for Ruby 1.8 it has to be a Class or Module. + # + # @api private + # @param exceptions [Array] + # @return [Module] an exception matcher + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#185 + def build_exception_matcher(exceptions); end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#133 + def calculate_sleep_amount(retries, env); end + + # @param env [Faraday::Env] + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#147 + def call(env); end + + private + + # RFC for RateLimit Header Fields for HTTP: + # https://www.ietf.org/archive/id/draft-ietf-httpapi-ratelimit-headers-05.html#name-fields-definition + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#222 + def calculate_rate_limit_reset(env); end + + # MDN spec for Retry-After header: + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#229 + def calculate_retry_after(env); end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#234 + def calculate_retry_interval(retries); end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#245 + def parse_retry_header(env, header); end + + # @return [Boolean] + # + # source://faraday-retry//lib/faraday/retry/middleware.rb#206 + def retry_request?(env, exception); end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#211 + def rewind_files(body); end +end + +# source://faraday-retry//lib/faraday/retry/middleware.rb#18 +Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS = T.let(T.unsafe(nil), Array) + +# source://faraday-retry//lib/faraday/retry/middleware.rb#22 +Faraday::Retry::Middleware::IDEMPOTENT_METHODS = T.let(T.unsafe(nil), Array) + +# Options contains the configurable parameters for the Retry middleware. +# +# source://faraday-retry//lib/faraday/retry/middleware.rb#25 +class Faraday::Retry::Middleware::Options < ::Faraday::Options + # source://faraday-retry//lib/faraday/retry/middleware.rb#58 + def backoff_factor; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#62 + def exceptions; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#46 + def interval; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#54 + def interval_randomness; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#42 + def max; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#50 + def max_interval; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#66 + def methods; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#74 + def retry_block; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#70 + def retry_if; end + + # source://faraday-retry//lib/faraday/retry/middleware.rb#78 + def retry_statuses; end + + class << self + # source://faraday-retry//lib/faraday/retry/middleware.rb#34 + def from(value); end + end +end + +# source://faraday-retry//lib/faraday/retry/middleware.rb#32 +Faraday::Retry::Middleware::Options::DEFAULT_CHECK = T.let(T.unsafe(nil), Proc) + +# source://faraday-retry//lib/faraday/retry/version.rb#5 +Faraday::Retry::VERSION = T.let(T.unsafe(nil), String)