Source code for romsearch.util.general
import copy
import os
import re
import time
from datetime import datetime
[docs]
def split(full_list, chunk_size=10):
"""Split a list in chunks of size chunk_size
Args:
full_list (list): list to split
chunk_size (int, optional): size of each chunk. Defaults to 10
"""
for i in range(0, len(full_list), chunk_size):
yield full_list[i : i + chunk_size]
[docs]
def match_retool_search_terms(
full_name,
search_term,
short_name=None,
region_free_name=None,
match_type=None,
):
"""Match a name against a search term, given retool's matching rules
Args:
full_name (str): Full name for the ROM
search_term (str): Search term to match against
short_name (str): Short name to match against. Defaults to None,
which inherits the full name
region_free_name (str): Region free name to match against. Defaults to None,
which inherits the full name
match_type (str): Type of matching. Defaults to None,
which will match against short name
"""
match_found = False
# Assign default short/region-free names if not supplied
if short_name is None:
short_name = copy.deepcopy(full_name)
if region_free_name is None:
region_free_name = copy.deepcopy(full_name)
# If none, match against lowercased short name
if match_type is None:
if short_name.lower() == search_term.lower():
match_found = True
# If full, match against lowercase full name
elif match_type == "full":
if full_name.lower() == search_term.lower():
match_found = True
# If region-free, match against lowercased region-free name
elif match_type == "regionFree":
if region_free_name.lower() == search_term.lower():
match_found = True
# If regex, match against full name
elif match_type == "regex":
match = re.search(search_term, full_name)
if match is not None:
match_found = True
else:
raise ValueError(f"Unsure how to deal with name type {match_type}")
return match_found
[docs]
def normalize_name(
f,
disc_rename=None,
):
"""Normalize a name to standard form
Currently, just normalizes the disc name
Args:
f (str): Name to normalize
disc_rename (dict, optional): Disc rename mappings. Defaults to None.
"""
f_norm = copy.deepcopy(f)
if disc_rename is not None:
for k, v in disc_rename.items():
if k in f_norm:
f_norm = f_norm.replace(k, v)
return f_norm
[docs]
def get_file_time(
f,
datetime_format="%Y/%m/%d, %H:%M:%S",
return_as_str=True,
):
"""Get created file time from the file itself
Args:
f (str): Filename
datetime_format (str, optional): Date and time format. Defaults to "%Y/%m/%d %H:%M:%S"
return_as_str (bool, optional): Return string or full datetime. Defaults to True
"""
if os.path.exists(f):
ti_m = os.path.getmtime(f)
date_ti_m = datetime.strptime(time.ctime(ti_m), "%a %b %d %H:%M:%S %Y")
else:
date_ti_m = datetime(year=1900, month=1, day=1, hour=0, minute=0, second=0)
if return_as_str:
date_ti_m_str = date_ti_m.strftime(format=datetime_format)
return date_ti_m_str
else:
return date_ti_m