savagedb_bot/utils/formatting.py

85 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Утилиты форматирования данных для Telegram
"""
def get_us_state_name(state_code: str) -> str:
"""
Конвертирует двухбуквенный код штата США в полное название
"""
states = {
'AL': 'Alabama', 'AK': 'Alaska', 'AZ': 'Arizona', 'AR': 'Arkansas', 'CA': 'California',
'CO': 'Colorado', 'CT': 'Connecticut', 'DE': 'Delaware', 'FL': 'Florida', 'GA': 'Georgia',
'HI': 'Hawaii', 'ID': 'Idaho', 'IL': 'Illinois', 'IN': 'Indiana', 'IA': 'Iowa',
'KS': 'Kansas', 'KY': 'Kentucky', 'LA': 'Louisiana', 'ME': 'Maine', 'MD': 'Maryland',
'MA': 'Massachusetts', 'MI': 'Michigan', 'MN': 'Minnesota', 'MS': 'Mississippi', 'MO': 'Missouri',
'MT': 'Montana', 'NE': 'Nebraska', 'NV': 'Nevada', 'NH': 'New Hampshire', 'NJ': 'New Jersey',
'NM': 'New Mexico', 'NY': 'New York', 'NC': 'North Carolina', 'ND': 'North Dakota', 'OH': 'Ohio',
'OK': 'Oklahoma', 'OR': 'Oregon', 'PA': 'Pennsylvania', 'RI': 'Rhode Island', 'SC': 'South Carolina',
'SD': 'South Dakota', 'TN': 'Tennessee', 'TX': 'Texas', 'UT': 'Utah', 'VT': 'Vermont',
'VA': 'Virginia', 'WA': 'Washington', 'WV': 'West Virginia', 'WI': 'Wisconsin', 'WY': 'Wyoming',
'DC': 'District of Columbia'
}
return states.get(state_code.upper(), state_code)
def format_sale_date(date_str: str) -> str:
"""
Форматирует дату продажи из MM/YYYY в красивый формат
"""
if not date_str or date_str == 'None' or '/' not in date_str:
return "Unknown"
try:
month, year = date_str.split('/')
months = {
'1': 'January', '2': 'February', '3': 'March', '4': 'April',
'5': 'May', '6': 'June', '7': 'July', '8': 'August',
'9': 'September', '10': 'October', '11': 'November', '12': 'December'
}
month_name = months.get(month.lstrip('0'), month)
return f"{month_name} {year}"
except:
return date_str
def parse_location(location_str: str) -> str:
r"""
Парсит и форматирует локацию из формата ST/TOWN или ST\TOWN
"""
if not location_str or location_str == 'None':
return "Unknown Location"
try:
# Проверяем оба варианта разделителей: / и \
if '/' in location_str:
state_code, city = location_str.split('/', 1)
state_name = get_us_state_name(state_code.strip())
city_formatted = city.strip().title()
return f"{city_formatted}, {state_name}"
elif '\\' in location_str:
state_code, city = location_str.split('\\', 1)
state_name = get_us_state_name(state_code.strip())
city_formatted = city.strip().title()
return f"{city_formatted}, {state_name}"
else:
return location_str
except:
return location_str
def escape_markdown(text: str) -> str:
"""
Экранирует специальные символы Markdown для безопасной отправки в Telegram
"""
if not text:
return ""
# Символы которые нужно экранировать для Markdown
escape_chars = ['*', '_', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']
escaped_text = str(text)
for char in escape_chars:
escaped_text = escaped_text.replace(char, f'\\{char}')
return escaped_text