SYMBOL INDEX (50 symbols across 13 files) FILE: vfs_appointment_bot/main.py class KeyValueAction (line 15) | class KeyValueAction(argparse.Action): method __call__ (line 23) | def __call__(self, parser, namespace, values, option_string=None): function main (line 36) | def main() -> None: function initialize_logger (line 103) | def initialize_logger(): FILE: vfs_appointment_bot/notification/email_client.py class EmailClient (line 7) | class EmailClient(NotificationClient): method __init__ (line 8) | def __init__(self): method send_notification (line 19) | def send_notification(self, message: str) -> None: method __construct_email_text (line 42) | def __construct_email_text(self, email: str, message: str) -> str: FILE: vfs_appointment_bot/notification/notification_client.py class NotificationClient (line 7) | class NotificationClient(ABC): method __init__ (line 16) | def __init__(self, config_section: str, required_config_keys: List[str]): method send_notification (line 31) | def send_notification(self, message: str) -> None: method _validate_config (line 43) | def _validate_config(self, required_config_keys: list[str]): class NotificationClientConfigValidationError (line 68) | class NotificationClientConfigValidationError(Exception): class NotificationClientError (line 72) | class NotificationClientError(Exception): FILE: vfs_appointment_bot/notification/notification_client_factory.py class UnsupportedNotificationChannelError (line 4) | class UnsupportedNotificationChannelError(Exception): function get_notification_client (line 8) | def get_notification_client(channel: str) -> NotificationClient: FILE: vfs_appointment_bot/notification/telegram_client.py class TelegramClient (line 8) | class TelegramClient(NotificationClient): method __init__ (line 17) | def __init__(self): method send_notification (line 28) | def send_notification(self, message: str) -> None: FILE: vfs_appointment_bot/notification/twilio_client.py class TwilioClient (line 9) | class TwilioClient(NotificationClient): method __init__ (line 18) | def __init__(self): method send_notification (line 36) | def send_notification(self, message: str) -> None: method __send_message (line 60) | def __send_message( method __call (line 86) | def __call( FILE: vfs_appointment_bot/utils/config_reader.py function initialize_config (line 8) | def initialize_config(config_dir="config"): function get_config_section (line 30) | def get_config_section(section: str, default: Dict = None) -> Dict: function get_config_value (line 48) | def get_config_value(section: str, key: str, default: str = None) -> str: FILE: vfs_appointment_bot/utils/date_utils.py function extract_date_from_string (line 4) | def extract_date_from_string(text): FILE: vfs_appointment_bot/utils/timer.py function countdown (line 6) | def countdown(t: int, message="Countdown", unit="seconds"): FILE: vfs_appointment_bot/vfs_bot/vfs_bot.py class LoginError (line 16) | class LoginError(Exception): class VfsBot (line 20) | class VfsBot(ABC): method __init__ (line 28) | def __init__(self): method run (line 37) | def run(self, args: argparse.Namespace = None) -> bool: method get_appointment_params (line 114) | def get_appointment_params(self, args: argparse.Namespace) -> Dict[str... method notify_appointment (line 140) | def notify_appointment(self, appointment_params: Dict[str, str], dates... method login (line 166) | def login( method pre_login_steps (line 188) | def pre_login_steps(self, page: playwright.sync_api.Page) -> None: method check_for_appontment (line 201) | def check_for_appontment( FILE: vfs_appointment_bot/vfs_bot/vfs_bot_de.py class VfsBotDe (line 10) | class VfsBotDe(VfsBot): method __init__ (line 23) | def __init__(self, source_country_code: str): method login (line 43) | def login(self, page: Page, email_id: str, password: str) -> None: method pre_login_steps (line 68) | def pre_login_steps(self, page: Page) -> None: method check_for_appontment (line 83) | def check_for_appontment( FILE: vfs_appointment_bot/vfs_bot/vfs_bot_factory.py class UnsupportedCountryError (line 4) | class UnsupportedCountryError(Exception): function get_vfs_bot (line 8) | def get_vfs_bot(source_country_code: str, destination_country_code: str)... FILE: vfs_appointment_bot/vfs_bot/vfs_bot_it.py class VfsBotIt (line 10) | class VfsBotIt(VfsBot): method __init__ (line 23) | def __init__(self, source_country_code: str): method login (line 46) | def login(self, page: Page, email_id: str, password: str) -> None: method pre_login_steps (line 71) | def pre_login_steps(self, page: Page) -> None: method check_for_appontment (line 86) | def check_for_appontment(