From fc16c3e16d033b2ab45063d6bd2e0e89b5a758e0 Mon Sep 17 00:00:00 2001 From: CoderboticsAI Date: Fri, 14 Jul 2023 20:40:39 +0000 Subject: [PATCH] Refactor `build_search_query` to `format_value`, `build_search_query` --- imbox/query.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/imbox/query.py b/imbox/query.py index 58e72c1..2f4ad65 100644 --- a/imbox/query.py +++ b/imbox/query.py @@ -1,16 +1,37 @@ import datetime from imbox.utils import date_to_date_text +from typing import Dict, Any -def build_search_query(imap_attribute_lookup, **kwargs): +def format_value(value: Any) -> str: + """Formats the value based on its type.""" + if isinstance(value, datetime.date): + value = date_to_date_text(value) + if isinstance(value, str) and '"' in value: + value = value.replace('"', "'") + return value + + +def build_search_query(imap_attribute_lookup: Dict[str, str], **kwargs: Any) -> str: + """Builds a search query string for IMAP based on the given criteria. + + Args: + imap_attribute_lookup (Dict[str, str]): A dictionary mapping attribute names to IMAP attribute placeholders. + kwargs (Any): Keyword arguments representing search criteria. + + Returns: + str: The search query string. + + Example: + >>> imap_attribute_lookup = {'subject': 'SUBJECT "{}"', 'from': 'FROM "{}"'} + >>> build_search_query(imap_attribute_lookup, subject="Hello", from="example@gmail.com") + 'SUBJECT "Hello" FROM "example@gmail.com"' + """ query = [] for name, value in kwargs.items(): if value is not None: - if isinstance(value, datetime.date): - value = date_to_date_text(value) - if isinstance(value, str) and '"' in value: - value = value.replace('"', "'") + value = format_value(value) query.append(imap_attribute_lookup[name].format(value)) if query: