import datetime
def compare_maintenance_tasks(tasks):
"""
Compares values of form fields for maintenance tasks with fixed retry intervals.
Args:
tasks (list): A list of dictionaries, where each dictionary represents a
maintenance task. Each task should have:
- 'task_id': Unique identifier for the task (int).
- 'last_attempt': Datetime of the last attempt (datetime).
- 'retry_interval_days': Number of days to wait before retrying (int).
- 'field1': Value of the first form field (str).
- 'field2': Value of the second form field (int).
- ... other fields as needed.
Returns:
list: A list of dictionaries, where each dictionary contains information about
tasks that need to be retried, including the task ID, the reason for retry,
and the next retry time. Returns an empty list if no tasks need retry.
"""
retries_needed = []
today = datetime.date.today()
for task in tasks:
last_attempt_date = task['last_attempt'].date()
retry_interval = task['retry_interval_days']
# Calculate time since last attempt
time_since_last_attempt = today - last_attempt_date
days_since_last_attempt = time_since_last_attempt.days
# Check if retry is needed
if days_since_last_attempt >= retry_interval:
# Compare form field values (example comparison)
if task['field1'] != "expected_value" or task['field2'] != 10:
retries_needed.append({
'task_id': task['task_id'],
'reason': "Form field values do not match expected values",
'next_retry_time': today + datetime.timedelta(days=retry_interval)
})
print(f"Task {task['task_id']} needs retry. Next retry: {today + datetime.timedelta(days=retry_interval)}")
else:
print(f"Task {task['task_id']} does not need retry. Last attempt: {last_attempt_date}, Retry interval: {retry_interval}, Days since last attempt: {days_since_last_attempt}")
return retries_needed
if __name__ == '__main__':
# Example usage
tasks_data = [
{
'task_id': 1,
'last_attempt': datetime.datetime(2024, 1, 15),
'retry_interval_days': 7,
'field1': "expected_value",
'field2': 10
},
{
'task_id': 2,
'last_attempt': datetime.datetime(2024, 1, 20),
'retry_interval_days': 7,
'field1': "different_value",
'field2': 10
},
{
'task_id': 3,
'last_attempt': datetime.datetime(2024, 1, 28),
'retry_interval_days': 7,
'field1': "expected_value",
'field2': 10
},
{
'task_id': 4,
'last_attempt': datetime.datetime(2024, 2, 1),
'retry_interval_days': 7,
'field1': "expected_value",
'field2': 10
}
]
retries = compare_maintenance_tasks(tasks_data)
print("\nTasks needing retry:")
for retry_task in retries:
print(retry_task)
Add your comment