Przeglądaj źródła

Fix importing error and constants

Colin Powell 3 lat temu
rodzic
commit
5f20b3b2df
2 zmienionych plików z 29 dodań i 11 usunięć
  1. 9 0
      games/constants.py
  2. 20 11
      games/utils.py

+ 9 - 0
games/constants.py

@@ -0,0 +1,9 @@
+ENGLISH_PATCHED_KEYWORDS = ["patched", "english", "english patched"]
+UNDUB_KEYWORDS = ["undub"]
+HACK_KEYWORDS = ["hack"]
+
+REGION_KEYWORDS = {
+    "US": ["(u)", "(usa)", "(us)"],
+    "JP": ["(j)", "japan", "jp", "jpn"],
+    "EU": ["(e)", "eur", "europe", "pal"],
+}

+ 20 - 11
games/utils.py

@@ -1,3 +1,9 @@
+from games.constants import (
+    ENGLISH_PATCHED_KEYWORDS,
+    HACK_KEYWORDS,
+    REGION_KEYWORDS,
+    UNDUB_KEYWORDS,
+)
 import os
 import xml.etree.ElementTree as ET
 import subprocess
@@ -11,10 +17,6 @@ import logging
 
 logger = logging.Logger(__name__)
 
-US_STRINGS = ["(u)", "(usa)", "(us)"]
-JP_STRINGS = ["(j)", "japan", "jp", "jpn"]
-EU_STRINGS = ["(e)", "eur", "europe", "pal"]
-
 
 def update_media_root_for_import(file_path):
     """Given a file path, re-write it for our app MEDIA_ROOT"""
@@ -52,24 +54,31 @@ def import_gamelist_file_to_db_for_system(
     for game in games:
         name = game.find("name").text
         game_path = game.find("path").text.lower()
-        obj, created = Game.objects.get_or_create(name=name, game_system=game_system)
+        try:
+            obj, created = Game.objects.get_or_create(
+                name=name, game_system=game_system
+            )
+        except Game.MultipleObjectsReturned:
+            logger.warning(
+                f"While importing {name} for {game_system}, duplicate entry found"
+            )
 
         if not created and not full_scan:
             not_imported_games.append(game)
             logger.info(f"Found game {game} and not doing full scan, so skipping")
             continue
 
-        english_patched = "patched" in game_path
-        undub = "undub" in game_path
-        hack = "hack" in game_path
+        english_patched = game_path.lower() in ENGLISH_PATCHED_KEYWORDS
+        undub = game_path.lower() in UNDUB_KEYWORDS
+        hack = game_path.lower() in HACK_KEYWORDS
 
         region = None
 
-        if any(us in game_path for us in US_STRINGS):
+        if any(us in game_path for us in REGION_KEYWORDS["US"]):
             region = Game.Region.US.name
-        if any(jp in game_path for jp in JP_STRINGS):
+        if any(jp in game_path for jp in REGION_KEYWORDS["JP"]):
             region = Game.Region.JP.name
-        if any(eu in game_path for eu in EU_STRINGS):
+        if any(eu in game_path for eu in REGION_KEYWORDS["EU"]):
             region = Game.Region.EU.name
 
         release_date_str = game.find("releasedate").text