import re
import time
import random
def validate_data(data, patterns, retry_interval=5, max_retries=3):
"""
Validates user data against a list of patterns with retry mechanism.
Args:
data (dict): The user data to validate.
patterns (dict): A dictionary where keys are field names and values are regex patterns.
retry_interval (int): The interval (in seconds) between retries.
max_retries (int): The maximum number of retry attempts.
Returns:
dict: A dictionary containing validation results for each field.
Each field's result is a dictionary with 'valid' (bool) and 'message' (str).
Returns None if validation fails after all retries.
"""
results = {}
for field, pattern in patterns.items():
results[field] = {'valid': False, 'message': ''}
for attempt in range(max_retries):
try:
if re.match(pattern, str(data.get(field, ''))): # Handle missing fields
results[field]['valid'] = True
results[field]['message'] = ''
break # Validation successful, exit retry loop
else:
# Simulate a potential transient error
if random.random() < 0.1: # 10% chance of failure
time.sleep(retry_interval)
else:
pass #Pattern doesn't match
except Exception as e:
print(f"Validation error for field '{field}': {e}")
if attempt < max_retries - 1:
time.sleep(retry_interval)
else:
return None #validation failed after all retries
if not results[field]['valid']:
results[field]['message'] = f"Field '{field}' does not match pattern: {pattern}"
return results
if __name__ == '__main__':
# Example Usage
user_data = {
'username': 'valid_user',
'email': 'test@example.com',
'age': '30',
'phone': '123-456-7890'
}
patterns = {
'username': r'^[a-zA-Z0-9_]+$', # Alphanumeric and underscore
'email': r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', # Basic email format
'age': r'^\d+$', # Only digits
'phone': r'^\d{3}-\d{3}-\d{4}$' # Specific phone number format
}
validation_results = validate_data(user_data, patterns)
if validation_results:
for field, result in validation_results.items():
print(f"{field}: Valid={result['valid']}, Message={result['message']}")
else:
print("Data validation failed after multiple retries.")
Add your comment