Skip to content

Commit fd7b67f

Browse files
committed
Clean up uploadSubtitles and removeSubtitles methods
1 parent 61c851c commit fd7b67f

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

plexapi/video.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)