* Add property to return the Plex Media Server data metadata path
* Add property to return the filepath for a resource
* Add tests for metadataDirectory and resourceFilepath
* Optimize methods to use library get/search
* Revert methods
* Fix reloading of episodes for missing parentRatingKey
* Add tests for LibrarySection.get with kwargs
* Use generator for string join
* Group media type edit mixins
* Add UserRatingMixin
* Add LibrarySection methods to multi-edit items
* Remove deprecated banners
* Factor out resource lock/unlock mixins
* Update `fetchItems` to accept list of rating keys
* Add repr and helper methods to Common object
* Update tests
* Update MyPlexAccount to use Plex API v2
* Update MyPlexAccount test
* Add rememberMe option to MyPlexAccount sign in
* Update MyPlexAccount do string
* Refactor base fetchItems for pagination
* Use base fetchItems for LibrarySection methods
* Use base fetchItems for MyPlexAccount watchlist
* Use base fetchItems for PlexServer history
* Fix imports
* Reload when accessing audioStreams or subtitleStreams
* Add setDefault method to AudioStream and SubtitleStream
* Update subtitle test
* Add `videoStreams()` convenience method
* Add test for `videoStreams()` method
* Add `seasonCount` attribute to `Show`
* Add test for show seasonCount
* Fix season year test
* Fix show studio test
* Fix season year test
Season year metadata is flakey
* Properly close file object in mixin uploads
* Also support a file-like object as the upload `filepath` parameter
* Update image upload tests for file-like object
* Use @cached_property in PlexSession.user
* Use @cached_property in PlexServer.library
* Use @cached_property in PlexServer.settings
* Tests: Update clearing plex.settings cache
* Use @cached_property in LibrarySection.totalSize
* Add backports.cached-property==1.0.2; python_version<="3.7" dependency
* Import cached_property from dist or backports
* Add backports.cached-property to requirements_dev.txt
* Remove version pin for backports.cached-property in requirements.txt
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
Since themes may take a while to upload, it may be beneficial to have a separate `timeout` option for uploading themes, instead of using the default `config.TIMEOUT`.
* Filter out bad discover search results
An stub object is sometimes returned from the API that is marked as
`'external'` but has has no `'SearchResults'` key.
{'id': 'external', 'title': 'More Ways To Watch', 'size': 0}
* Wrap line to fit 127c
* Ensure empty array for SearchResult
* Add editionTitle to Movie attributes
* Add EditionTitleMixin to Movie
* Add tests for movie editionTitle
* Add `editions()` method to Movie
* Add test for movie editions method
* Add PlayedUnplayedMixin
* Deprecate Video isPlayed, markWatched, and markUnwatched
* Rename all deprecated methods
* Return self to enable method chaining
* Update tests for audio markPlayed / markUnplayed using history
* Remove duplicate video history tests
* Expose callbackError
This makes it easier to catch errors without separately instantiating an AlertListener
* Update docstring.
* Fix docstring
Removed post-argument note, incorporated suggestion.
* Add PlexObjects for all library media tags
* Add method to return all library media tags
* Add test for Library.tags
* Update Video.optimize
* Update video optimize test
* Use TAGTYPE for LibraryMediaTags
* Accept LibraryMediaTag as a search filter
* Use ratingKey and id before key in repr
* Add base findItem method
* Create new PlexSession objects
* PlexSession objects are unique from their base media objects. These objects are built from `/status/sessions` instead of `/library/metadata/<ratingKey>`. This allows reloading data from sessions without overwriting them.
* Add some media and client attributes for sessions
* Add separater property to return the PlexSession user object
* This speeds up building the `PlexSession` object since it doesn't need to lookup the user.
* The user object is also cached for future lookups.
* Remove PlexSession attributes from tests
* Never auto reload a PlexSession object
* Rename PlexSession.usernames for backwards compatibility
Co-authored-by: jjlawren <jjlawren@users.noreply.github.com>
* Don't cache myPlexAccount in PlexSession
* Move session stop method to PlexSession
Co-authored-by: jjlawren <jjlawren@users.noreply.github.com>
* Fix discover search results
* Plex API response changed to separate "Free on Demand" and "More Ways To Watch"
* Add test for searchDiscover
* Manually set watchlist and discover result to online metadata objects
* Replace all key format ratingKey with key
* Add libtype argument to searchDiscover
* Update tests for searchDiscover libtype
* Add includeUserState=1 parameter to Discover results details key
* Add method to return UserState object
* Check parentIndex is an integer for Episode.seasonEpisode
* Saves an extra API call to `season()` for Season 0 (Specials)
* Use parentKey and grandparentKey to fetch show
* Remove Plex news
* Replace requests with query method for online hubs
* Add myPlexAccount watchlist methods
* Add mixin for objects that can be added to watchlist
* Add tests for watchlist
* Always split ratingKey from guid for watchlist
* Add method to retrieve streaming service availability
* Add test for streaming service availability
* Add filtering and sorting for watchlists
* Fix watchlist tests
* Add method to check if an item is on a user's watchlist
* Update watchlist tests
* Make account optional for WatchlistMixin
* Add Discover search
* Use manuallyLoadXML method for Discover search results
* Remove webshows and podcasts
* Fix WatchlistMixin account AttributeError
* Add BadRequest exception when adding to/removing from watchlist
* Update watchlist tests for BadRequest
* Update watchlist doc strings
* Rename _autoReload to _overwriteNone
* Allow disabling auto reloading
* Update test for disabling auto reloading
* Change autoReload to private attribute
* Refactor tag functions into EditTagsMixin
* Fix test mixins tag use of _tagSingular
* Add kwargs to editTags
* Fix _tagSingular and _tagPlural if tag is already singular or plural
* Make editing tags chainable
* Add chaining example to doc string
* Update editTags doc string for batch editing
* Update Collection.edit() method
* Add new EditFieldMixin and subclasses
* Add EditFieldMixin to Plex objects
* Update PlexPartialObject.edit() doc string
* Cast Track parentIndex to int
* Add base _searchTypes property
* Add kwargs to editField
* Editing album title also requires the artist ratingKey
* Add tests for editing fields
* Deprecate Collection.edit()
* Make editing fields chainable
* Add chaining example to doc string
* Add batch editing mode
* Add test for batchEdits
* Clean up mixins imports
* Reorder mixins
* Fix tests for batch edit
* Fix various typos
* Fix various typos in tests
* Fix typos in `tests`
* Fix more typos
* Fix hasScalingMatrix test
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Initial support of artist radio stations
* Fix docstring
* Change to a singular optional station
* Change to a property
* Revert property
* Explicitly set librarySectionID
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
* Fix mediaType argument for PlexServer.agents()
* Cleanup Agent and AgentMediaType attributes
* Add `DeprecationWarning` to `languageCode`
* Make Agent.settings() method public
* Add `DeprecationWarning` to `Agent._settings()`
* Fix parsing Setting.enumValues
* XML attribute for agent settings uses `values` instead of `enumValues`
* Add secure and option attributes to Setting
* Add test for server agents