"""S3 Path Utilities.""" from datetime import datetime from lib import constants from lib.utils import aws # Accounting Period def build_period_slug(accounting_period_id, accounting_period_name): """Construct a prefix based on the period.""" return f'{accounting_period_id}-{aws.sanitize(accounting_period_name)}' # Accounting Run def build_accounting_run_slug(accounting_run_id, run_controller_name): """Construct accounting run S3 path prefix.""" return f'{accounting_run_id}-{aws.sanitize(run_controller_name)}' # Payment def build_payments_slug(payment_group_payment_id: int, payment_name: str) -> str: """Construct payment S3 prefix. Args: payment_group_payment_id (int): ID of the payment_group_payment payment_name (str): name of the payment_group_payment Returns: prefix of an s3 path """ return f'{payment_group_payment_id}-{aws.sanitize(payment_name)}' def build_archived_payment_summary_file_name(payment_name: str) -> str: """Construct an filename with a timestamp to archive a payment summary report. Args: payment_name (str): name of the payment_group_payment Returns: payment summary filename as payment_name-YYYY-MM-DD-HH:MM:SS.MS-summary.tsv """ today = datetime.now() return ( f'{aws.sanitize(payment_name)}-' f'{aws.sanitize(str(today))}-' f'{constants.FILE_NAME_PAYMENT_SUMMARY_SUFFIX}' ) def build_payment_summary_file_name(payment_name: str) -> str: """Construct payment summary export filename. Args: payment_name (str): name of the payment_group_payment Returns: payment summary filename as payment-name-summary.tsv """ return ( f'{aws.sanitize(payment_name)}-' f'{constants.FILE_NAME_PAYMENT_SUMMARY_SUFFIX}' ) def build_sales_file_slug(sales_file_id: int, sales_file_name: str) -> str: """Build a sales file s3 prefix. Args: sales_file_id (int): ID of the sales_file sales_file_name (str): name of the sales_file Returns: a sanitized S3 prefix (example: 123-sales-file-name) """ return f'{sales_file_id}-{aws.sanitize(sales_file_name)}'