Explorar el Código

Now inserting in db the generic status for feeds

Lucas Villeneuve hace 5 años
padre
commit
9e9436fb7c
Se han modificado 5 ficheros con 97 adiciones y 53 borrados
  1. 1 3
      myanimebot.py
  2. 6 6
      myanimebot/anilist.py
  3. 2 2
      myanimebot/myanimelist.py
  4. 40 41
      myanimebot/utils.py
  5. 48 1
      tests/test_utils.py

+ 1 - 3
myanimebot.py

@@ -126,9 +126,7 @@ async def background_check_feed(asyncioloop):
 								else: image = data_img[0]
 								feed.media.image = image
 
-								type = feed.description.partition(" - ")[0]
-
-								cursor.execute("INSERT INTO t_feeds (published, title, url, user, found, type) VALUES (%s, %s, %s, %s, NOW(), %s)", (pubDate, feed.media.name, feed.media.url, user.name, type))
+								cursor.execute("INSERT INTO t_feeds (published, title, url, user, found, type) VALUES (%s, %s, %s, %s, NOW(), %s)", (pubDate, feed.media.name, feed.media.url, user.name, feed.get_status_str()))
 								globals.conn.commit()
 								
 								for server in user.servers:

+ 6 - 6
myanimebot/anilist.py

@@ -286,16 +286,16 @@ async def send_embed_to_channels(activity : utils.Feed):
                                             build_embed(activity))
 
 
-def insert_feed_db(activity: utils.Feed):
+def insert_feed_db(feed: utils.Feed):
     ''' Insert an AniList feed into database '''
 
     cursor = globals.conn.cursor(buffered=True)
     cursor.execute("INSERT INTO t_feeds (published, title, url, user, found, type, service) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, NOW(), %s, %s)",
-                    (activity.date_publication.timestamp(),
-                     activity.media.name,
-                     activity.media.url,
-                     activity.user.name,
-                     activity.description, # TODO Create enum to make it generic
+                    (feed.date_publication.timestamp(),
+                     feed.media.name,
+                     feed.media.url,
+                     feed.user.name,
+                     feed.get_status_str(),
                      globals.SERVICE_ANILIST))
     globals.conn.commit()
 

+ 2 - 2
myanimebot/myanimelist.py

@@ -25,9 +25,9 @@ def build_feed_from_data(data, user : utils.User, image, pubDateRaw, type : util
 
     if data.description.startswith('-') :
         if type == utils.MediaType.MANGA:
-            data.description = "Rereading " + data.description
+            data.description = "Re-reading " + data.description
         else:
-            data.description = "Rewatching " + data.description								
+            data.description = "Re-watching " + data.description								
 
     status, progress, episodes = break_rss_description_string(data.description)
 

+ 40 - 41
myanimebot/utils.py

@@ -74,7 +74,7 @@ class MediaStatus(Enum):
             return MediaStatus.DROPPED
         elif first_word in ['PAUSED', 'ON-HOLD']:
             return MediaStatus.PAUSED
-        elif first_word in ['REREAD', 'REREADING', 'REWATCHED', 'REWATCHING']:
+        elif first_word in ['REREAD', 'REREADING', 'REWATCHED', 'REWATCHING', 'RE-READING', 'RE-WATCHING', 'RE-READ', 'RE-WATCHED']:
             return MediaStatus.REPEATING
         else:
             raise NotImplementedError('Error: Cannot convert "{}" to a MediaStatus'.format(label))
@@ -125,6 +125,44 @@ class Feed():
         self.description = description
         self.progress = progress
 
+    
+    def get_status_str(self):
+
+        if self.status == MediaStatus.CURRENT \
+        or self.status == MediaStatus.REPEATING:
+
+            if self.media.type == MediaType.ANIME:
+                status_str = 'Watching'
+            elif self.media.type == MediaType.MANGA:
+                status_str = 'Reading'
+            else:
+                raise NotImplementedError('Unknown MediaType: {}'.format(self.media.type))
+
+            # Add prefix if rewatching
+            if self.status == MediaStatus.REPEATING:
+                status_str = 'Re-{}'.format(status_str.lower())
+
+        elif self.status == MediaStatus.COMPLETED:
+            status_str = 'Completed'
+        elif self.status == MediaStatus.PAUSED:
+            status_str = 'Paused'
+        elif self.status == MediaStatus.DROPPED:
+            status_str = 'Dropped'
+        elif self.status == MediaStatus.PLANNING:
+
+            if self.media.type == MediaType.ANIME:
+                media_type_label = 'watch'
+            elif self.media.type == MediaType.MANGA:
+                media_type_label = 'read'
+            else:
+                raise NotImplementedError('Unknown MediaType: {}'.format(self.media.type))
+
+            status_str = 'Plans to {}'.format(media_type_label)
+        else:
+            raise NotImplementedError('Unknown MediaStatus: {}'.format(self.status))
+
+        return status_str
+
 
 def replace_all(text : str, replace_dic : dict) -> str:
     ''' Replace multiple substrings from a string '''
@@ -187,50 +225,11 @@ def build_description_string(feed : Feed):
     ''' Build and returns a string describing the feed '''
 
     media_type_count = feed.media.type.get_media_count_type()
-
-    # if feed.service == Service.ANILIST:
-    if feed.status == MediaStatus.CURRENT \
-    or feed.status == MediaStatus.REPEATING:
-
-        if feed.media.type == MediaType.ANIME:
-            status_str = 'Watching'
-        elif feed.media.type == MediaType.MANGA:
-            status_str = 'Reading'
-        else:
-            raise NotImplementedError('Unknown MediaType: {}'.format(feed.media.type))
-
-        # Get feed status as a string
-        if feed.status == MediaStatus.REPEATING:
-            status_str = 'Re-{}'.format(status_str)
-
-    elif feed.status == MediaStatus.COMPLETED:
-        status_str = 'Completed'
-    elif feed.status == MediaStatus.PAUSED:
-        status_str = 'Paused'
-    elif feed.status == MediaStatus.DROPPED:
-        status_str = 'Dropped'
-    elif feed.status == MediaStatus.PLANNING:
-
-        if feed.media.type == MediaType.ANIME:
-            media_type_label = 'watch'
-        elif feed.media.type == MediaType.MANGA:
-            media_type_label = 'read'
-        else:
-            raise NotImplementedError('Unknown MediaType: {}'.format(feed.media.type))
-
-        status_str = 'Plans to {}'.format(media_type_label)
-    else:
-        raise NotImplementedError('Unknown MediaStatus: {}'.format(feed.status))
+    status_str = feed.get_status_str()
 
     # Build the string
     return '{} | {} of {} {}'.format(status_str, feed.progress, feed.media.episodes, media_type_count)
 
-    # elif feed.service == Service.MAL:
-    #     return feed.description
-    
-    # else:
-    #     raise NotImplementedError('Unknown Service: {}'.format(feed.service))
-
 
 def get_channels(server_id: int) -> dict:
     ''' Returns the registered channels for a server '''

+ 48 - 1
tests/test_utils.py

@@ -1,6 +1,6 @@
 import pytest
 
-from myanimebot.utils import Media, MediaStatus, MediaType, Service, filter_name, replace_all, truncate_end_show
+from myanimebot.utils import *
 from myanimebot.globals import SERVICE_MAL, SERVICE_ANILIST
 
 def test_MediaType_from_str():
@@ -245,6 +245,10 @@ def test_media_status():
         assert MediaStatus.from_str('REWATCHING') == repeating
         assert MediaStatus.from_str('reWATCHED') == repeating
         assert MediaStatus.from_str('RewatChing') == repeating
+        assert MediaStatus.from_str('Re-watChing') == repeating
+        assert MediaStatus.from_str('Re-watChed') == repeating
+        assert MediaStatus.from_str('Re-readiNg') == repeating
+        assert MediaStatus.from_str('Re-Read') == repeating
     except Exception as e:
         pytest.fail("Unexpected Exception : {}".format(e))
 
@@ -260,3 +264,46 @@ def test_media_status():
         MediaStatus.from_str('')
     with pytest.raises(TypeError):
         MediaStatus.from_str(None)
+
+
+def test_feed_get_status_str():
+    user = User(id=0, service_id=0, name='test', servers=[])
+
+    media = Media(name='Random anime',
+                    url=None,
+                    episodes='?',
+                    image=None,
+                    type=MediaType.ANIME)
+
+    feed = Feed(service=Service.MAL,
+                    date_publication=None,
+                    user=user,
+                    status=MediaStatus.COMPLETED,
+                    description=None,
+                    media=media,
+                    progress='?')
+
+    assert feed.get_status_str() == 'Completed'
+    feed.status = MediaStatus.PLANNING
+    assert feed.get_status_str() == 'Plans to watch'
+    feed.status = MediaStatus.DROPPED
+    assert feed.get_status_str() == 'Dropped'
+    feed.status = MediaStatus.PAUSED
+    assert feed.get_status_str() == 'Paused'
+    feed.status = MediaStatus.CURRENT
+    assert feed.get_status_str() == 'Watching'
+    feed.status = MediaStatus.REPEATING
+    assert feed.get_status_str() == 'Re-watching'
+
+    feed.media.type = MediaType.MANGA
+    assert feed.get_status_str() == 'Re-reading'
+    feed.status = MediaStatus.COMPLETED
+    assert feed.get_status_str() == 'Completed'
+    feed.status = MediaStatus.PLANNING
+    assert feed.get_status_str() == 'Plans to read'
+    feed.status = MediaStatus.DROPPED
+    assert feed.get_status_str() == 'Dropped'
+    feed.status = MediaStatus.PAUSED
+    assert feed.get_status_str() == 'Paused'
+    feed.status = MediaStatus.CURRENT
+    assert feed.get_status_str() == 'Reading'