Coverage for otaku_info/utils/object_conversion.py: 50%
Shortcuts on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""LICENSE
2Copyright 2020 Hermann Krumrey <hermann@krumreyh.com>
4This file is part of otaku-info.
6otaku-info is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
11otaku-info is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
16You should have received a copy of the GNU General Public License
17along with otaku-info. If not, see <http://www.gnu.org/licenses/>.
18LICENSE"""
19from typing import Optional
21from otaku_info.db import MediaItem, MediaUserState, LnRelease
22from otaku_info.enums import ListService, MediaType, MediaSubType
23from otaku_info.external.entities.AnilistUserItem import AnilistUserItem
24from otaku_info.external.entities.AnimeListItem import AnimeListItem
25from otaku_info.external.entities.MangadexItem import MangadexItem
26from otaku_info.external.entities.RedditLnRelease import RedditLnRelease
29def anime_list_item_to_media_item(item: AnimeListItem) -> MediaItem:
30 """
31 Converts an Anime List Item to a Media Item
32 :param item: The anime list item to convert
33 :return: The resulting MediaItem
34 """
35 return MediaItem(
36 service=item.service,
37 service_id=str(item.id),
38 media_type=item.media_type,
39 media_subtype=item.media_subtype,
40 english_title=item.english_title,
41 romaji_title=item.romaji_title,
42 cover_url=item.cover_url,
43 latest_release=item.latest_release,
44 latest_volume_release=item.volumes,
45 next_episode=item.next_episode,
46 next_episode_airing_time=item.next_episode_airing_time,
47 releasing_state=item.releasing_state
48 )
51def anilist_user_item_to_media_user_state(
52 anilist_user_item: AnilistUserItem,
53 user_id: int
54):
55 """
56 Converts an anilist user item to a MediaUserState entry
57 :param anilist_user_item: The item to convert
58 :param user_id: The ID of the user
59 :return:
60 """
61 return MediaUserState(
62 service=anilist_user_item.service,
63 service_id=str(anilist_user_item.id),
64 media_type=anilist_user_item.media_type,
65 user_id=user_id,
66 progress=anilist_user_item.progress,
67 volume_progress=anilist_user_item.volume_progress,
68 score=anilist_user_item.score,
69 consuming_state=anilist_user_item.consuming_state
70 )
73def mangadex_item_to_media_item(mangadex_item: MangadexItem) -> MediaItem:
74 """
75 Converts a mangadex item to a media item
76 :param mangadex_item: The mangadex item to convert
77 :return: The media item
78 """
79 return MediaItem(
80 service=ListService.MANGADEX,
81 service_id=mangadex_item.mangadex_id,
82 media_type=MediaType.MANGA,
83 media_subtype=MediaSubType.MANGA,
84 english_title=mangadex_item.english_title,
85 romaji_title=mangadex_item.romaji_title,
86 cover_url=mangadex_item.cover_url,
87 latest_release=mangadex_item.total_chapters,
88 releasing_state=mangadex_item.releasing_state
89 )
92def reddit_ln_release_to_ln_release(
93 reddit_item: RedditLnRelease,
94 media_item: Optional[MediaItem]
95) -> LnRelease:
96 """
97 Converts a reddit LN release to a LNRelease object
98 :param reddit_item: The reddit item to convert
99 :param media_item: Optional linked media item
100 :return: The generated LNRelease
101 """
102 release = LnRelease(
103 series_name=reddit_item.series_name,
104 volume=reddit_item.volume,
105 physical=reddit_item.physical,
106 digital=reddit_item.digital,
107 release_date_string=reddit_item.release_date_string,
108 publisher=reddit_item.publisher,
109 purchase_link=reddit_item.purchase_link
110 )
111 if media_item is not None:
112 release.service = media_item.service
113 release.service_id = media_item.service_id
114 release.media_type = media_item.media_type
115 return release