@@ -134,15 +134,20 @@ def subtitleStreams(self):
134134 return streams
135135
136136 def uploadSubtitles (self , filepath ):
137- """ Upload Subtitle file for video. """
137+ """ Upload a subtitle file for the video.
138+
139+ Parameters:
140+ filepath (str): Path to subtitle file.
141+ """
138142 url = f'{ self .key } /subtitles'
139143 filename = os .path .basename (filepath )
140144 subFormat = os .path .splitext (filepath )[1 ][1 :]
145+ params = {
146+ 'title' : filename ,
147+ 'format' : subFormat ,
148+ }
149+ headers = {'Accept' : 'text/plain, */*' }
141150 with open (filepath , 'rb' ) as subfile :
142- params = {'title' : filename ,
143- 'format' : subFormat
144- }
145- headers = {'Accept' : 'text/plain, */*' }
146151 self ._server .query (url , self ._server ._session .post , data = subfile , params = params , headers = headers )
147152 return self
148153
@@ -188,15 +193,28 @@ def downloadSubtitles(self, subtitleStream):
188193 self ._server .query (key , self ._server ._session .put , params = params )
189194 return self
190195
191- def removeSubtitles (self , streamID = None , streamTitle = None ):
192- """ Remove Subtitle from movie's subtitles listing.
196+ def removeSubtitles (self , subtitleStream = None , streamID = None , streamTitle = None ):
197+ """ Remove an upload or downloaded subtitle from the video.
198+
199+ Note: If the subtitle file is located inside video directory it will be deleted.
200+ Files outside of video directory are not affected.
201+ Embedded subtitles cannot be removed.
193202
194- Note: If subtitle file is located inside video directory it will bbe deleted.
195- Files outside of video directory are not effected.
203+ Parameters:
204+ subtitleStream (:class:`~plexapi.media.SubtitleStream`, optional): Subtitle object to remove.
205+ streamID (int, optional): ID of the subtitle stream to remove.
206+ streamTitle (str, optional): Title of the subtitle stream to remove.
196207 """
197- for stream in self .subtitleStreams ():
198- if streamID == stream .id or streamTitle == stream .title :
199- self ._server .query (stream .key , self ._server ._session .delete )
208+ if subtitleStream is None :
209+ try :
210+ subtitleStream = next (
211+ stream for stream in self .subtitleStreams ()
212+ if streamID == stream .id or streamTitle == stream .title
213+ )
214+ except StopIteration :
215+ raise BadRequest (f"Subtitle stream with ID '{ streamID } ' or title '{ streamTitle } ' not found." ) from None
216+
217+ self ._server .query (subtitleStream .key , self ._server ._session .delete )
200218 return self
201219
202220 def optimize (self , title = '' , target = '' , deviceProfile = '' , videoQuality = None ,
0 commit comments