示例#1
0
    def _create_sync_job(
        job_type: JobType,
        **extra_attrs: Any,
    ) -> SyncJob:

        base_attrs = {
            "name": "sync",
            "type": job_type,
            "source_url": "http://host",
            "source_key": "aaa",
            "dest_url": "http://host2",
            "dest_key": "bbb",
            "dest_path": "/path",
            "dest_profile": "1",
        }

        if job_type is JobType.Sonarr:
            return SonarrSyncJob.parse_obj({**base_attrs, **extra_attrs})

        elif job_type is JobType.Radarr:
            return RadarrSyncJob.parse_obj({**base_attrs, **extra_attrs})

        elif job_type is JobType.Lidarr:
            return LidarrSyncJob.parse_obj({**base_attrs, **extra_attrs})

        else:
            _assert_never(job_type)
示例#2
0
def status(job_type: JobType, url: str) -> str:
    if job_type is JobType.Sonarr:
        return parse.urljoin(url, "api/v3/system/status")
    if job_type is JobType.Radarr:
        return parse.urljoin(url, "api/v3/system/status")
    if job_type is JobType.Lidarr:
        return parse.urljoin(url, "api/v1/system/status")
    else:
        _assert_never(job_type)
示例#3
0
def metadata(job_type: JobType, url: str) -> str:
    if job_type is JobType.Lidarr:
        return parse.urljoin(url, "api/v1/metadataprofile")
    if job_type is JobType.Radarr:
        raise Exception(f"{job_type} does not support metadata")
    if job_type is JobType.Sonarr:
        raise Exception(f"{job_type} does not support metadata")
    else:
        _assert_never(job_type)
示例#4
0
def language(job_type: JobType, url: str) -> str:
    if job_type is JobType.Sonarr:
        return parse.urljoin(url, "api/v3/languageprofile")
    if job_type is JobType.Radarr:
        return parse.urljoin(url, "api/v3/language")
    if job_type is JobType.Lidarr:
        raise Exception(f"{job_type} does not support language")
    else:
        _assert_never(job_type)
示例#5
0
def tag(job_type: JobType, url: str) -> str:
    if job_type is JobType.Sonarr:
        return parse.urljoin(url, "api/v3/tag")
    if job_type is JobType.Radarr:
        return parse.urljoin(url, "api/v3/tag")
    if job_type is JobType.Lidarr:
        return parse.urljoin(url, "api/v1/tag")
    else:
        _assert_never(job_type)
示例#6
0
def profile(job_type: JobType, url: str) -> str:
    if job_type is JobType.Sonarr:
        return parse.urljoin(url, "api/v3/qualityprofile")
    if job_type is JobType.Radarr:
        return parse.urljoin(url, "api/v3/qualityprofile")
    if job_type is JobType.Lidarr:
        return parse.urljoin(url, "api/v1/qualityprofile")
    else:
        _assert_never(job_type)
示例#7
0
def content(job_type: JobType, url: str) -> str:
    if job_type is JobType.Sonarr:
        return parse.urljoin(url, "api/v3/series")
    if job_type is JobType.Radarr:
        return parse.urljoin(url, "api/v3/movie")
    if job_type is JobType.Lidarr:
        return parse.urljoin(url, "api/v1/artist")
    else:
        _assert_never(job_type)
示例#8
0
    def _create_content_item(job_type: JobType, **extra_attrs: Any) -> ContentItem:
        nonlocal count

        count += 1

        base_attrs = {
            "title": f"Item {count}",
            "title_slug": f"item-{count}",
            "images": [],
            "monitored": True,
            "quality_profile_id": 1,
            "root_folder_path": "/path",
            "tags": [],
        }

        if job_type is JobType.Radarr:
            return RadarrContent.parse_obj(
                {
                    "tmdb_id": count,
                    "year": 2016,
                    "has_file": True,
                    **base_attrs,
                    **extra_attrs,
                }
            )

        elif job_type is JobType.Sonarr:
            return SonarrContent.parse_obj(
                {
                    "tvdb_id": count,
                    "use_scene_numbering": True,
                    "season_folder": True,
                    "seasons": [{"title": "Season 1", "attr": 10}],
                    **base_attrs,
                    **extra_attrs,
                }
            )

        elif job_type is JobType.Lidarr:
            return LidarrContent.parse_obj(
                {
                    "artist_name": f"Item {count}",
                    "foreign_artist_id": f"{count}",
                    "images": [],
                    "monitored": False,
                    "albums": [{"title": "Season 1", "attr": 10}],
                    "quality_profile_id": 1,
                    "root_folder_path": "/path",
                    "tags": [],
                    **extra_attrs,
                }
            )

        else:
            _assert_never(job_type)
示例#9
0
    def content(self) -> ContentItems:
        full_url = routes.content(job_type=self.job_type, url=self.url)
        json = self.get(url=full_url)

        if self.job_type is JobType.Sonarr:
            return list(map(SonarrContent.parse_obj, json))
        elif self.job_type is JobType.Radarr:
            return list(map(RadarrContent.parse_obj, json))
        elif self.job_type is JobType.Lidarr:
            return list(map(LidarrContent.parse_obj, json))
        else:
            _assert_never(self.job_type)
示例#10
0
def test_get_content_payloads_search_missing(
    job_type: JobType,
    create_sync_job: CreateSyncJob,
    create_content_item: CreateContentItem,
) -> None:
    job = create_sync_job(
        job_type,
        dest_search_missing=True,
    )

    profiles: Profiles = [
        Profile(name="Any", id=1),
    ]

    item_one = create_content_item(job_type)

    content: ContentItems = [item_one]

    payloads = get_content_payloads(
        job=job,
        content=content,
        dest_profiles=profiles,
        dest_metadata_profiles=profiles,
        dest_languages=[],
    )

    payload = payloads[0]

    assert payload
    assert payload.add_options

    if job_type is JobType.Sonarr:
        assert payload.add_options["searchForMissingEpisodes"]
    elif job_type is JobType.Radarr:
        assert payload.add_options["searchForMovie"]
    elif job_type is JobType.Lidarr:
        assert payload.add_options["searchForMissingAlbums"]
    else:
        _assert_never(job_type)