File size: 1,232 Bytes
48ae4e0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
"""
Input Validation Helpers
"""
from typing import Optional
from datetime import datetime
import re
def validate_date(date_str: str) -> Optional[datetime]:
"""Validate and parse date string"""
try:
return datetime.fromisoformat(date_str.replace('Z', '+00:00'))
except:
return None
def validate_provider_name(name: str) -> bool:
"""Validate provider name"""
if not name or not isinstance(name, str):
return False
return len(name) >= 2 and len(name) <= 50
def validate_category(category: str) -> bool:
"""Validate category name"""
valid_categories = [
"market_data",
"blockchain_explorers",
"news",
"sentiment",
"onchain_analytics"
]
return category in valid_categories
def validate_url(url: str) -> bool:
"""Validate URL format"""
url_pattern = re.compile(
r'^https?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain...
r'localhost|' # localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
return url_pattern.match(url) is not None
|