mini-studio-223 / utils.py
enotkrutoy's picture
Deploy Gradio app with multiple files
c3a4d04 verified
raw
history blame
3.03 kB
import re
import random
import string
from typing import List, Dict, Optional
def is_valid_email_format(email: str) -> bool:
"""Проверка базового формата email"""
if not email or '@' not in email:
return False
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
def extract_domain(email: str) -> Optional[str]:
"""Извлечение домена из email"""
if '@' in email:
return email.split('@')[1].lower()
return None
def generate_username(pattern: str = "random") -> str:
"""Генерация имени пользователя"""
if pattern == "random":
names = ["john", "jane", "mike", "sarah", "david", "lisa", "robert", "emma"]
return random.choice(names)
elif pattern == "numbers":
names = ["john", "jane", "mike", "sarah", "david", "lisa", "robert", "emma"]
return random.choice(names) + str(random.randint(1, 999))
else:
return ''.join(random.choices(string.ascii_lowercase, k=8))
def clean_email_list(emails: str) -> List[str]:
"""Очистка списка email от дубликатов и пустых строк"""
email_list = []
for email in emails.split('\n'):
email = email.strip()
if email and email not in email_list:
email_list.append(email)
return email_list
def format_validation_results(results: List[Dict]) -> List[List]:
"""Форматирование результатов для отображения в таблице"""
formatted = []
for result in results:
formatted.append([
result.get("email", ""),
result.get("overall_status", "unknown"),
"✓" if result.get("format_valid", False) else "✗",
"✓" if result.get("domain_valid", False) else "✗",
"✓" if result.get("mx_valid", False) else "✗",
result.get("smtp_valid", "unknown")
])
return formatted
def get_status_color(status: str) -> str:
"""Получение цвета для статуса"""
colors = {
"valid": "#28a745",
"invalid": "#dc3545",
"disposable": "#ffc107",
"unknown": "#6c757d",
"error": "#dc3545",
"invalid_domain": "#dc3545"
}
return colors.get(status, "#6c757d")
def generate_sample_emails(count: int = 5) -> List[str]:
"""Генерация примеров email для демонстрации"""
samples = [
"john.doe@gmail.com",
"invalid-email",
"test@nonexistentdomain12345.com",
"user@10minutemail.com",
"admin@github.com"
]
return samples[:count]
def calculate_validation_time(start_time: float, end_time: float) -> str:
"""Расчет времени валидации"""
duration = end_time - start_time
if duration < 1:
return f"{int(duration * 1000)} мс"
else:
return f"{duration:.2f} сек"