delarte/src/delarte/naming.py

50 lines
1.2 KiB
Python

# License: GNU AGPL v3: http://www.gnu.org/licenses/
# This file is part of `delarte` (https://git.afpy.org/fcode/delarte.git)
"""Provide contextualized based file naming utility."""
import re
def file_name_builder(
*,
use_id=False,
sep=" - ",
seq_pfx=" - ",
seq_no_pad=False,
add_rendition=False,
add_variant=False
):
"""Create a file namer."""
def sub_sequence_counter(match):
index = match[1]
if not seq_no_pad:
index = (len(match[2]) - len(index)) * "0" + index
return seq_pfx + index
def replace_sequence_counter(s: str) -> str:
return re.sub(r"\s+\((\d+)/(\d+)\)", sub_sequence_counter, s)
def build_file_name(program, rendition, variant):
"""Create a file name."""
if use_id:
return program.id
fields = [replace_sequence_counter(program.title)]
if program.subtitle:
fields.append(replace_sequence_counter(program.subtitle))
if add_rendition:
fields.append(rendition.code)
if add_variant:
fields.append(variant.code)
name = sep.join(fields)
name = re.sub(r'[/:<>"\\|?*]', "", name)
return name
return build_file_name