Skip to content

Commit d582705

Browse files
committed
add per_request parameter to the mass change methods
1 parent 9fab67b commit d582705

File tree

3 files changed

+54
-20
lines changed

3 files changed

+54
-20
lines changed

arrapi/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from .lidarr import LidarrAPI
66
from .readarr import ReadarrAPI
77

8-
__version__ = "1.1.2"
8+
__version__ = "1.1.3"
99
__author__ = "Nathan Taggart"
1010
__credits__ = "meisnate12"
1111
__package_name__ = "arrapi"

arrapi/radarr.py

+25-9
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ def add_multiple_movies(self, ids: List[Union[int, str, Movie]],
177177
monitor: bool = True,
178178
search: bool = True,
179179
minimum_availability: str = "announced",
180-
tags: Optional[List[Union[str, int, Tag]]] = None
180+
tags: Optional[List[Union[str, int, Tag]]] = None,
181+
per_request: int = None
181182
) -> Tuple[List[Movie], List[Movie], List[int]]:
182183
""" Adds multiple Movies to Radarr in a single call by their TMDb IDs.
183184
@@ -189,6 +190,7 @@ def add_multiple_movies(self, ids: List[Union[int, str, Movie]],
189190
search (bool): Search for the Movies after adding.
190191
minimum_availability (str): Minimum Availability for the Movies. Valid options are announced, inCinemas, released, or preDB.
191192
tags (Optional[List[Union[str, int, Tag]]]): Tags to be added to the Movies.
193+
per_request (int): Number of Movies to add per request.
192194
193195
Returns:
194196
Tuple[List[:class:`~arrapi.objs.Movie`], List[:class:`~arrapi.objs.Movie`], List[int]]: List of Movies that were able to be added, List of Movies already in Radarr, List of TMDb IDs of Movies that could not be found.
@@ -199,8 +201,9 @@ def add_multiple_movies(self, ids: List[Union[int, str, Movie]],
199201
options = self._validate_add_options(root_folder, quality_profile, monitor=monitor, search=search,
200202
minimum_availability=minimum_availability, tags=tags)
201203
json = []
202-
not_found_ids = []
204+
movies = []
203205
existing_movies = []
206+
not_found_ids = []
204207
for item in ids:
205208
try:
206209
if isinstance(item, Movie):
@@ -215,7 +218,10 @@ def add_multiple_movies(self, ids: List[Union[int, str, Movie]],
215218
existing_movies.append(movie)
216219
except NotFound:
217220
not_found_ids.append(item)
218-
movies = [Movie(self, data=m) for m in self._post_movie_import(json)] if len(json) > 0 else []
221+
if per_request is None:
222+
per_request = len(json)
223+
for i in range(0, len(json), per_request):
224+
movies.extend([Movie(self, data=m) for m in self._post_movie_import(json[i:i+per_request])])
219225
return movies, existing_movies, not_found_ids
220226

221227
def edit_multiple_movies(self, ids: List[Union[int, str, Movie]],
@@ -225,7 +231,8 @@ def edit_multiple_movies(self, ids: List[Union[int, str, Movie]],
225231
monitored: Optional[bool] = None,
226232
minimum_availability: Optional[str] = None,
227233
tags: Optional[List[Union[str, int, Tag]]] = None,
228-
apply_tags: str = "add"
234+
apply_tags: str = "add",
235+
per_request: int = None
229236
) -> Tuple[List[Movie], List[int]]:
230237
""" Edit multiple Movies in Radarr by their TMDb IDs.
231238
@@ -238,6 +245,7 @@ def edit_multiple_movies(self, ids: List[Union[int, str, Movie]],
238245
minimum_availability (Optional[str]): Minimum Availability to change the Movie to. Valid options are announced, inCinemas, released, or preDB.
239246
tags (Optional[List[Union[str, int, Tag]]]): Tags to be added, replaced, or removed from the Movie.
240247
apply_tags (str): How you want to edit the Tags. Valid options are add, replace, or remove.
248+
per_request (int): Number of Movies to edit per request.
241249
242250
Returns:
243251
Tuple[List[:class:`~arrapi.objs.Movie`], List[int]]: List of Movies that were able to be edited, List of TMDb IDs that could not be found in Radarr.
@@ -251,30 +259,38 @@ def edit_multiple_movies(self, ids: List[Union[int, str, Movie]],
251259
movie_list = []
252260
valid_ids, invalid_ids = self._validate_ids(ids)
253261
if len(valid_ids) > 0:
254-
json["movieIds"] = valid_ids
255-
movie_list = [Movie(self, data=m) for m in self._put_movie_editor(json)]
262+
if per_request is None:
263+
per_request = len(valid_ids)
264+
for i in range(0, len(valid_ids), per_request):
265+
json["movieIds"] = valid_ids[i:i+per_request]
266+
movie_list = [Movie(self, data=m) for m in self._put_movie_editor(json)]
256267
return movie_list, invalid_ids
257268

258269
def delete_multiple_movies(self, ids: List[Union[int, str, Movie]],
259270
addImportExclusion: bool = False,
260-
deleteFiles: bool = False
271+
deleteFiles: bool = False,
272+
per_request: int = None
261273
) -> List[int]:
262274
""" Deletes multiple Movies in Radarr by their TMDb IDs.
263275
264276
Parameters:
265277
ids (List[Union[int, str, Movie]]): List of TMDb IDs, IMDb IDs, or Movie objects you want to delete.
266278
addImportExclusion (bool): Add Import Exclusion for these TMDb IDs.
267279
deleteFiles (bool): Delete Files for these TMDb IDs.
280+
per_request (int): Number of Movies to delete per request.
268281
269282
Returns:
270283
List[int]: List of TMDb IDs that could not be found in Radarr.
271284
"""
272285
valid_ids, invalid_ids = self._validate_ids(ids)
273286
if len(valid_ids) > 0:
274287
json = {
275-
"movieIds": valid_ids,
276288
"deleteFiles": deleteFiles,
277289
"addImportExclusion": addImportExclusion
278290
}
279-
self._delete_movie_editor(json)
291+
if per_request is None:
292+
per_request = len(valid_ids)
293+
for i in range(0, len(valid_ids), per_request):
294+
json["movieIds"] = valid_ids[i:i+per_request]
295+
self._delete_movie_editor(json)
280296
return invalid_ids

arrapi/sonarr.py

+28-10
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ def add_multiple_series(self, tvdb_ids: List[Union[Series, int]],
205205
search: bool = True,
206206
unmet_search: bool = True,
207207
series_type: str = "standard",
208-
tags: Optional[List[Union[str, int, Tag]]] = None
208+
tags: Optional[List[Union[str, int, Tag]]] = None,
209+
per_request: int = None
209210
) -> Tuple[List[Series], List[Series], List[int]]:
210211
""" Adds multiple Series to Sonarr in a single call by their TVDb IDs.
211212
@@ -220,6 +221,7 @@ def add_multiple_series(self, tvdb_ids: List[Union[Series, int]],
220221
unmet_search (bool): Start search for cutoff unmet episodes of the Series after adding.
221222
series_type (str): Series Type for the Series. Valid options are ``standard``, ``daily``, or ``anime``.
222223
tags (Optional[List[Union[str, int, Tag]]]): Tags to be added to the Series.
224+
per_request (int): Number of Series to add per request.
223225
224226
Returns:
225227
Tuple[List[:class:`~arrapi.objs.Series`], List[:class:`~arrapi.objs.Series`], List[int]]: List of Series that were able to be added, List of Series already in Sonarr, List of TVDb IDs of Series that could not be found.
@@ -231,8 +233,9 @@ def add_multiple_series(self, tvdb_ids: List[Union[Series, int]],
231233
season_folder=season_folder, search=search, unmet_search=unmet_search,
232234
series_type=series_type, tags=tags)
233235
json = []
234-
not_found_ids = []
236+
series = []
235237
existing_series = []
238+
not_found_ids = []
236239
for tvdb_id in tvdb_ids:
237240
try:
238241
series = tvdb_id if isinstance(tvdb_id, Series) else self.get_series(tvdb_id=tvdb_id)
@@ -242,7 +245,10 @@ def add_multiple_series(self, tvdb_ids: List[Union[Series, int]],
242245
existing_series.append(series)
243246
except NotFound:
244247
not_found_ids.append(tvdb_id)
245-
series = [Series(self, data=s) for s in self._post_series_import(json)] if len(json) > 0 else []
248+
if per_request is None:
249+
per_request = len(json)
250+
for i in range(0, len(json), per_request):
251+
series.extend([Series(self, data=s) for s in self._post_series_import(json[i:i+per_request])])
246252
return series, existing_series, not_found_ids
247253

248254
def edit_multiple_series(self, tvdb_ids: List[Union[Series, int]],
@@ -255,7 +261,8 @@ def edit_multiple_series(self, tvdb_ids: List[Union[Series, int]],
255261
season_folder: Optional[bool] = None,
256262
series_type: Optional[str] = None,
257263
tags: Optional[List[Union[str, int, Tag]]] = None,
258-
apply_tags: str = "add"
264+
apply_tags: str = "add",
265+
per_request: int = None
259266
) -> Tuple[List[Series], List[int]]:
260267
""" Edit multiple Series in Sonarr by their TVDb IDs.
261268
@@ -271,6 +278,7 @@ def edit_multiple_series(self, tvdb_ids: List[Union[Series, int]],
271278
series_type (Optional[str]): Series Type to change the Series to. Valid options are standard, daily, or anime.
272279
tags (Optional[List[Union[str, int, Tag]]]): Tags to be added, replaced, or removed from the Series.
273280
apply_tags (str): How you want to edit the Tags. Valid options are add, replace, or remove.
281+
per_request (int): Number of Series to edit per request.
274282
275283
Returns:
276284
Tuple[List[:class:`~arrapi.objs.Series`], List[int]]: List of TVDb that were able to be edited, List of TVDb IDs that could not be found in Sonarr.
@@ -285,34 +293,44 @@ def edit_multiple_series(self, tvdb_ids: List[Union[Series, int]],
285293
series_list = []
286294
valid_ids, invalid_ids = self._validate_tvdb_ids(tvdb_ids)
287295
if len(valid_ids) > 0:
296+
if per_request is None:
297+
per_request = len(valid_ids)
288298
if "monitor" in json:
289-
self._edit_series_monitoring(valid_ids, json.pop("monitor"))
290-
json["seriesIds"] = valid_ids
291-
series_list = [Series(self, data=s) for s in self._put_series_editor(json)]
299+
json_monitor = json.pop("monitor")
300+
for i in range(0, len(valid_ids), per_request):
301+
self._edit_series_monitoring(valid_ids[i:i+per_request], json_monitor)
302+
for i in range(0, len(valid_ids), per_request):
303+
json["seriesIds"] = valid_ids[i:i+per_request]
304+
series_list.extend([Series(self, data=s) for s in self._put_series_editor(json)])
292305
return series_list, invalid_ids
293306

294307
def delete_multiple_series(self, tvdb_ids: List[Union[int, Series]],
295308
addImportExclusion: bool = False,
296-
deleteFiles: bool = False
309+
deleteFiles: bool = False,
310+
per_request: int = None
297311
) -> List[int]:
298312
""" Deletes multiple Series in Sonarr by their TVDb IDs.
299313
300314
Parameters:
301315
tvdb_ids (List[Union[int, Series]]): List of TVDb IDs or Series objects you want to delete.
302316
addImportExclusion (bool): Add Import Exclusion for these TVDb IDs.
303317
deleteFiles (bool): Delete Files for these TVDb IDs.
318+
per_request (int): Number of Series to delete per request.
304319
305320
Returns:
306321
List[int]: List of TVDb IDs that could not be found in Sonarr.
307322
"""
308323
valid_ids, invalid_ids = self._validate_tvdb_ids(tvdb_ids)
309324
if len(valid_ids) > 0:
310325
json = {
311-
"seriesIds": valid_ids,
312326
"deleteFiles": deleteFiles,
313327
"addImportExclusion": addImportExclusion
314328
}
315-
self._delete_series_editor(json)
329+
if per_request is None:
330+
per_request = len(valid_ids)
331+
for i in range(0, len(valid_ids), per_request):
332+
json["seriesIds"] = valid_ids[i:i+per_request]
333+
self._delete_series_editor(json)
316334
return invalid_ids
317335

318336
def _get_languageProfile(self):

0 commit comments

Comments
 (0)