misc: Compile constant regular expressions

Improve efficiency on reusable regular expressions, by compiling them.
This commit is contained in:
Michael Manganiello
2024-06-23 00:36:22 -03:00
parent 5f2e0ea71f
commit fc53d77a58
6 changed files with 20 additions and 21 deletions

View File

@@ -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,
)

View File

@@ -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]:

View File

@@ -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]

View File

@@ -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")

View File

@@ -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

View File

@@ -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