mirror of
https://github.com/rommapp/romm.git
synced 2026-06-28 06:46:00 +00:00
misc: Compile constant regular expressions
Improve efficiency on reusable regular expressions, by compiling them.
This commit is contained in:
@@ -12,7 +12,7 @@ from models.rom import Rom
|
||||
from pydantic import BaseModel, Field, computed_field
|
||||
from typing_extensions import NotRequired, TypedDict
|
||||
|
||||
SORT_COMPARE_REGEX = r"^([Tt]he|[Aa]|[Aa]nd)\s"
|
||||
SORT_COMPARE_REGEX = re.compile(r"^([Tt]he|[Aa]|[Aa]nd)\s")
|
||||
|
||||
RomIGDBMetadata = TypedDict( # type: ignore[misc]
|
||||
"RomIGDBMetadata",
|
||||
@@ -101,8 +101,7 @@ class RomSchema(BaseModel):
|
||||
@property
|
||||
def sort_comparator(self) -> str:
|
||||
return (
|
||||
re.sub(
|
||||
SORT_COMPARE_REGEX,
|
||||
SORT_COMPARE_REGEX.sub(
|
||||
"",
|
||||
self.name or self.file_name_no_tags,
|
||||
)
|
||||
|
||||
@@ -5,8 +5,8 @@ from enum import Enum
|
||||
|
||||
from config.config_manager import config_manager as cm
|
||||
|
||||
TAG_REGEX = r"\(([^)]+)\)|\[([^]]+)\]"
|
||||
EXTENSION_REGEX = r"\.(([a-z]+\.)*\w+)$"
|
||||
TAG_REGEX = re.compile(r"\(([^)]+)\)|\[([^]]+)\]")
|
||||
EXTENSION_REGEX = re.compile(r"\.(([a-z]+\.)*\w+)$")
|
||||
|
||||
LANGUAGES = [
|
||||
("Ar", "Arabic"),
|
||||
@@ -95,14 +95,14 @@ class FSHandler:
|
||||
)
|
||||
|
||||
def get_file_name_with_no_extension(self, file_name: str) -> str:
|
||||
return re.sub(EXTENSION_REGEX, "", file_name).strip()
|
||||
return EXTENSION_REGEX.sub("", file_name).strip()
|
||||
|
||||
def get_file_name_with_no_tags(self, file_name: str) -> str:
|
||||
file_name_no_extension = self.get_file_name_with_no_extension(file_name)
|
||||
return re.split(TAG_REGEX, file_name_no_extension)[0].strip()
|
||||
return TAG_REGEX.split(file_name_no_extension)[0].strip()
|
||||
|
||||
def parse_file_extension(self, file_name) -> str:
|
||||
match = re.search(EXTENSION_REGEX, file_name)
|
||||
match = EXTENSION_REGEX.search(file_name)
|
||||
return match.group(1) if match else ""
|
||||
|
||||
def _exclude_files(self, files, filetype) -> list[str]:
|
||||
|
||||
@@ -33,7 +33,7 @@ class FSRomsHandler(FSHandler):
|
||||
regs = []
|
||||
langs = []
|
||||
other_tags = []
|
||||
tags = [tag[0] or tag[1] for tag in re.findall(TAG_REGEX, file_name)]
|
||||
tags = [tag[0] or tag[1] for tag in TAG_REGEX.findall(file_name)]
|
||||
tags = [tag for subtags in tags for tag in subtags.split(",")]
|
||||
tags = [tag.strip() for tag in tags]
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ def conditionally_set_cache(
|
||||
|
||||
|
||||
# These are loaded in cache in update_switch_titledb_task
|
||||
SWITCH_TITLEDB_REGEX: Final = r"(70[0-9]{12})"
|
||||
SWITCH_PRODUCT_ID_REGEX: Final = r"(0100[0-9A-F]{12})"
|
||||
SWITCH_TITLEDB_REGEX: Final = re.compile(r"(70[0-9]{12})")
|
||||
SWITCH_PRODUCT_ID_REGEX: Final = re.compile(r"(0100[0-9A-F]{12})")
|
||||
|
||||
|
||||
# No regex needed for MAME
|
||||
@@ -33,12 +33,12 @@ MAME_XML_KEY: Final = "romm:mame_xml"
|
||||
conditionally_set_cache(MAME_XML_KEY, "mame_index.json")
|
||||
|
||||
# PS2 OPL
|
||||
PS2_OPL_REGEX: Final = r"^([A-Z]{4}_\d{3}\.\d{2})\..*$"
|
||||
PS2_OPL_REGEX: Final = re.compile(r"^([A-Z]{4}_\d{3}\.\d{2})\..*$")
|
||||
PS2_OPL_KEY: Final = "romm:ps2_opl_index"
|
||||
conditionally_set_cache(PS2_OPL_KEY, "ps2_opl_index.json")
|
||||
|
||||
# Sony serial codes for PS1, PS2, and PSP
|
||||
SONY_SERIAL_REGEX: Final = r".*([a-zA-Z]{4}-\d{5}).*$"
|
||||
SONY_SERIAL_REGEX: Final = re.compile(r".*([a-zA-Z]{4}-\d{5}).*$")
|
||||
|
||||
PS1_SERIAL_INDEX_KEY: Final = "romm:ps1_serial_index"
|
||||
conditionally_set_cache(PS1_SERIAL_INDEX_KEY, "ps1_serial_index.json")
|
||||
|
||||
@@ -341,13 +341,13 @@ class IGDBBaseHandler(MetadataHandler):
|
||||
fallback_rom = IGDBRom(igdb_id=None)
|
||||
|
||||
# Support for PS2 OPL filename format
|
||||
match = re.match(PS2_OPL_REGEX, file_name)
|
||||
match = PS2_OPL_REGEX.match(file_name)
|
||||
if platform_igdb_id == PS2_IGDB_ID and match:
|
||||
search_term = await self._ps2_opl_format(match, search_term)
|
||||
fallback_rom = IGDBRom(igdb_id=None, name=search_term)
|
||||
|
||||
# Support for sony serial filename format (PS, PS3, PS3)
|
||||
match = re.search(SONY_SERIAL_REGEX, file_name, re.IGNORECASE)
|
||||
match = SONY_SERIAL_REGEX.search(file_name, re.IGNORECASE)
|
||||
if platform_igdb_id == PS1_IGDB_ID and match:
|
||||
search_term = await self._ps1_serial_format(match, search_term)
|
||||
fallback_rom = IGDBRom(igdb_id=None, name=search_term)
|
||||
@@ -361,7 +361,7 @@ class IGDBBaseHandler(MetadataHandler):
|
||||
fallback_rom = IGDBRom(igdb_id=None, name=search_term)
|
||||
|
||||
# Support for switch titleID filename format
|
||||
match = re.search(SWITCH_TITLEDB_REGEX, file_name)
|
||||
match = SWITCH_TITLEDB_REGEX.search(file_name)
|
||||
if platform_igdb_id == SWITCH_IGDB_ID and match:
|
||||
search_term, index_entry = await self._switch_titledb_format(
|
||||
match, search_term
|
||||
@@ -376,7 +376,7 @@ class IGDBBaseHandler(MetadataHandler):
|
||||
)
|
||||
|
||||
# Support for switch productID filename format
|
||||
match = re.search(SWITCH_PRODUCT_ID_REGEX, file_name)
|
||||
match = SWITCH_PRODUCT_ID_REGEX.search(file_name)
|
||||
if platform_igdb_id == SWITCH_IGDB_ID and match:
|
||||
search_term, index_entry = await self._switch_productid_format(
|
||||
match, search_term
|
||||
|
||||
@@ -172,13 +172,13 @@ class MobyGamesHandler(MetadataHandler):
|
||||
fallback_rom = MobyGamesRom(moby_id=None)
|
||||
|
||||
# Support for PS2 OPL filename format
|
||||
match = re.match(PS2_OPL_REGEX, file_name)
|
||||
match = PS2_OPL_REGEX.match(file_name)
|
||||
if platform_moby_id == PS2_MOBY_ID and match:
|
||||
search_term = await self._ps2_opl_format(match, search_term)
|
||||
fallback_rom = MobyGamesRom(moby_id=None, name=search_term)
|
||||
|
||||
# Support for sony serial filename format (PS, PS3, PS3)
|
||||
match = re.search(SONY_SERIAL_REGEX, file_name, re.IGNORECASE)
|
||||
match = SONY_SERIAL_REGEX.search(file_name, re.IGNORECASE)
|
||||
if platform_moby_id == PS1_MOBY_ID and match:
|
||||
search_term = await self._ps1_serial_format(match, search_term)
|
||||
fallback_rom = MobyGamesRom(moby_id=None, name=search_term)
|
||||
@@ -192,7 +192,7 @@ class MobyGamesHandler(MetadataHandler):
|
||||
fallback_rom = MobyGamesRom(moby_id=None, name=search_term)
|
||||
|
||||
# Support for switch titleID filename format
|
||||
match = re.search(SWITCH_TITLEDB_REGEX, file_name)
|
||||
match = SWITCH_TITLEDB_REGEX.search(file_name)
|
||||
if platform_moby_id == SWITCH_MOBY_ID and match:
|
||||
search_term, index_entry = await self._switch_titledb_format(
|
||||
match, search_term
|
||||
@@ -207,7 +207,7 @@ class MobyGamesHandler(MetadataHandler):
|
||||
)
|
||||
|
||||
# Support for switch productID filename format
|
||||
match = re.search(SWITCH_PRODUCT_ID_REGEX, file_name)
|
||||
match = SWITCH_PRODUCT_ID_REGEX.search(file_name)
|
||||
if platform_moby_id == SWITCH_MOBY_ID and match:
|
||||
search_term, index_entry = await self._switch_productid_format(
|
||||
match, search_term
|
||||
|
||||
Reference in New Issue
Block a user