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

20 statements  

1"""LICENSE 

2Copyright 2020 Hermann Krumrey <hermann@krumreyh.com> 

3 

4This file is part of otaku-info. 

5 

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. 

10 

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. 

15 

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 

20 

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 

27 

28 

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 ) 

49 

50 

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 ) 

71 

72 

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 ) 

90 

91 

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