Skip to content

Commit

Permalink
feat: added manualimport endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
marksie1988 committed Apr 9, 2023
1 parent 4ee8845 commit c6e4a41
Show file tree
Hide file tree
Showing 9 changed files with 354 additions and 18 deletions.
Binary file added core.5913
Binary file not shown.
Binary file added core.5925
Binary file not shown.
48 changes: 48 additions & 0 deletions pyarr/radarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -561,3 +561,51 @@ def add_quality_profile(
"items": items,
}
return self._post("qualityprofile", self.ver_uri, data=data)

# GET /manualimport
def get_manual_import(
self,
folder: str,
download_id: Optional[str] = None,
movie_id: Optional[int] = None,
filter_existing_files: Optional[bool] = None,
replace_existing_files: Optional[bool] = None,
) -> JsonArray:
"""Gets a manual import list
Args:
downloadId (str): Download IDs
movieId (int, optional): Movie Database ID. Defaults to None.
folder (Optional[str], optional): folder name. Defaults to None.
filterExistingFiles (bool, optional): filter files. Defaults to True.
replaceExistingFiles (bool, optional): replace files. Defaults to True.
Returns:
JsonArray: List of dictionaries with items
"""
params: dict[str, Union[str, int, bool]] = {"folder": folder}
if download_id:
params["downloadId"] = download_id
if movie_id:
params["movieId"] = movie_id
if filter_existing_files:
params["filterExistingFiles"] = filter_existing_files
if replace_existing_files:
params["replaceExistingFiles"] = replace_existing_files

return self._get("manualimport", self.ver_uri, params=params)

# PUT /manualimport
def upd_manual_import(self, data: JsonObject) -> JsonObject:
"""Update a manual import
Note:
To be used in conjunction with get_manual_import()
Args:
data (JsonObject): Data containing changes
Returns:
JsonObject: Dictionary of updated record
"""
return self._put("manualimport", self.ver_uri, data=data)
48 changes: 48 additions & 0 deletions pyarr/readarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,3 +774,51 @@ def del_delay_profile(
"""

return self._delete(f"delayprofile/{id_}", self.ver_uri)

# GET /manualimport
def get_manual_import(
self,
folder: str,
download_id: Optional[str] = None,
author_id: Optional[int] = None,
filter_existing_files: Optional[bool] = None,
replace_existing_files: Optional[bool] = None,
) -> JsonArray:
"""Gets a manual import list
Args:
downloadId (str): Download IDs
author_id (int, optional): Author Database ID. Defaults to None.
folder (Optional[str], optional): folder name. Defaults to None.
filterExistingFiles (bool, optional): filter files. Defaults to True.
replaceExistingFiles (bool, optional): replace files. Defaults to True.
Returns:
JsonArray: List of dictionaries with items
"""
params: dict[str, Union[str, int, bool]] = {"folder": folder}
if download_id:
params["downloadId"] = download_id
if author_id:
params["authorId"] = author_id
if filter_existing_files:
params["filterExistingFiles"] = filter_existing_files
if replace_existing_files:
params["replaceExistingFiles"] = replace_existing_files

return self._get("manualimport", self.ver_uri, params=params)

# PUT /manualimport
def upd_manual_import(self, data: JsonObject) -> JsonObject:
"""Update a manual import
Note:
To be used in conjunction with get_manual_import()
Args:
data (JsonObject): Data containing changes
Returns:
JsonObject: Dictionary of updated record
"""
return self._put("manualimport", self.ver_uri, data=data)
48 changes: 48 additions & 0 deletions pyarr/sonarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -702,3 +702,51 @@ def add_quality_profile(
"items": items,
}
return self._post("qualityprofile", self.ver_uri, data=data)

# GET /manualimport
def get_manual_import(
self,
folder: str,
download_id: Optional[str] = None,
series_id: Optional[int] = None,
filter_existing_files: Optional[bool] = None,
replace_existing_files: Optional[bool] = None,
) -> JsonArray:
"""Gets a manual import list
Args:
downloadId (str): Download IDs
series_id (int, optional): Series Database ID. Defaults to None.
folder (Optional[str], optional): folder name. Defaults to None.
filterExistingFiles (bool, optional): filter files. Defaults to True.
replaceExistingFiles (bool, optional): replace files. Defaults to True.
Returns:
JsonArray: List of dictionaries with items
"""
params: dict[str, Union[str, int, bool]] = {"folder": folder}
if download_id:
params["downloadId"] = download_id
if series_id:
params["seriesId"] = series_id
if filter_existing_files:
params["filterExistingFiles"] = filter_existing_files
if replace_existing_files:
params["replaceExistingFiles"] = replace_existing_files

return self._get("manualimport", self.ver_uri, params=params)

# PUT /manualimport
def upd_manual_import(self, data: JsonObject) -> JsonObject:
"""Update a manual import
Note:
To be used in conjunction with get_manual_import()
Args:
data (JsonObject): Data containing changes
Returns:
JsonObject: Dictionary of updated record
"""
return self._put("manualimport", self.ver_uri, data=data)
2 changes: 1 addition & 1 deletion tests/test_lidarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ def test_upd_manual_import(lidarr_mock_client: LidarrAPI):
# TODO: get correct fixture
@pytest.mark.usefixtures
@responses.activate
def test_get_manual_import(lidarr_mock_client: LidarrAPI):
def test_get_retag(lidarr_mock_client: LidarrAPI):

responses.add(
responses.GET,
Expand Down
64 changes: 64 additions & 0 deletions tests/test_radarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,70 @@ def test_get_indexer(radarr_client: RadarrAPI):
assert isinstance(data, list)


# TODO: get correct fixture
@pytest.mark.usefixtures
@responses.activate
def test_get_manual_import(radarr_mock_client: RadarrAPI):

responses.add(
responses.GET,
"https://127.0.0.1:7878/api/v3/manualimport",
match=[matchers.query_string_matcher("folder=/movies/")],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
data = radarr_mock_client.get_manual_import(folder="/movies/")
assert isinstance(data, list)

responses.add(
responses.GET,
"https://127.0.0.1:7878/api/v3/manualimport",
match=[
matchers.query_string_matcher(
"folder=/movies/&downloadId=1&movieId=1&filterExistingFiles=True&replaceExistingFiles=True"
)
],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
data = radarr_mock_client.get_manual_import(
folder="/movies/",
download_id=1,
movie_id=1,
filter_existing_files=True,
replace_existing_files=True,
)
assert isinstance(data, list)


# TODO: get correct fixture, confirm update returns dict
@pytest.mark.usefixtures
@responses.activate
def test_upd_manual_import(radarr_mock_client: RadarrAPI):

responses.add(
responses.GET,
"https://127.0.0.1:7878/api/v3/manualimport",
match=[matchers.query_string_matcher("folder=/movies/")],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
man_import = radarr_mock_client.get_manual_import(folder="/movies/")

responses.add(
responses.PUT,
"https://127.0.0.1:7878/api/v3/manualimport",
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_dict.json"),
status=200,
)
data = radarr_mock_client.upd_manual_import(data=man_import)
assert isinstance(data, dict)


#### DELETES MUST BE LAST


Expand Down
64 changes: 64 additions & 0 deletions tests/test_readarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,70 @@ def test_upd_metadata_provider(readarr_client: ReadarrAPI):
assert isinstance(data, dict)


# TODO: get correct fixture
@pytest.mark.usefixtures
@responses.activate
def test_get_manual_import(readarr_mock_client: ReadarrAPI):

responses.add(
responses.GET,
"https://127.0.0.1:8787/api/v1/manualimport",
match=[matchers.query_string_matcher("folder=/books/")],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
data = readarr_mock_client.get_manual_import(folder="/books/")
assert isinstance(data, list)

responses.add(
responses.GET,
"https://127.0.0.1:8787/api/v1/manualimport",
match=[
matchers.query_string_matcher(
"folder=/books/&downloadId=1&authorId=1&filterExistingFiles=True&replaceExistingFiles=True"
)
],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
data = readarr_mock_client.get_manual_import(
folder="/books/",
download_id=1,
author_id=1,
filter_existing_files=True,
replace_existing_files=True,
)
assert isinstance(data, list)


# TODO: get correct fixture, confirm update returns dict
@pytest.mark.usefixtures
@responses.activate
def test_upd_manual_import(readarr_mock_client: ReadarrAPI):

responses.add(
responses.GET,
"https://127.0.0.1:8787/api/v1/manualimport",
match=[matchers.query_string_matcher("folder=/books/")],
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_list.json"),
status=200,
)
man_import = readarr_mock_client.get_manual_import(folder="/books/")

responses.add(
responses.PUT,
"https://127.0.0.1:8787/api/v1/manualimport",
headers={"Content-Type": "application/json"},
body=load_fixture("common/blank_dict.json"),
status=200,
)
data = readarr_mock_client.upd_manual_import(data=man_import)
assert isinstance(data, dict)


# DELETE ACTIONS MUST BE LAST


Expand Down
Loading

0 comments on commit c6e4a41

Please sign in to comment.