1. import datetime
  2. def compare_maintenance_tasks(tasks):
  3. """
  4. Compares values of form fields for maintenance tasks with fixed retry intervals.
  5. Args:
  6. tasks (list): A list of dictionaries, where each dictionary represents a
  7. maintenance task. Each task should have:
  8. - 'task_id': Unique identifier for the task (int).
  9. - 'last_attempt': Datetime of the last attempt (datetime).
  10. - 'retry_interval_days': Number of days to wait before retrying (int).
  11. - 'field1': Value of the first form field (str).
  12. - 'field2': Value of the second form field (int).
  13. - ... other fields as needed.
  14. Returns:
  15. list: A list of dictionaries, where each dictionary contains information about
  16. tasks that need to be retried, including the task ID, the reason for retry,
  17. and the next retry time. Returns an empty list if no tasks need retry.
  18. """
  19. retries_needed = []
  20. today = datetime.date.today()
  21. for task in tasks:
  22. last_attempt_date = task['last_attempt'].date()
  23. retry_interval = task['retry_interval_days']
  24. # Calculate time since last attempt
  25. time_since_last_attempt = today - last_attempt_date
  26. days_since_last_attempt = time_since_last_attempt.days
  27. # Check if retry is needed
  28. if days_since_last_attempt >= retry_interval:
  29. # Compare form field values (example comparison)
  30. if task['field1'] != "expected_value" or task['field2'] != 10:
  31. retries_needed.append({
  32. 'task_id': task['task_id'],
  33. 'reason': "Form field values do not match expected values",
  34. 'next_retry_time': today + datetime.timedelta(days=retry_interval)
  35. })
  36. print(f"Task {task['task_id']} needs retry. Next retry: {today + datetime.timedelta(days=retry_interval)}")
  37. else:
  38. 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}")
  39. return retries_needed
  40. if __name__ == '__main__':
  41. # Example usage
  42. tasks_data = [
  43. {
  44. 'task_id': 1,
  45. 'last_attempt': datetime.datetime(2024, 1, 15),
  46. 'retry_interval_days': 7,
  47. 'field1': "expected_value",
  48. 'field2': 10
  49. },
  50. {
  51. 'task_id': 2,
  52. 'last_attempt': datetime.datetime(2024, 1, 20),
  53. 'retry_interval_days': 7,
  54. 'field1': "different_value",
  55. 'field2': 10
  56. },
  57. {
  58. 'task_id': 3,
  59. 'last_attempt': datetime.datetime(2024, 1, 28),
  60. 'retry_interval_days': 7,
  61. 'field1': "expected_value",
  62. 'field2': 10
  63. },
  64. {
  65. 'task_id': 4,
  66. 'last_attempt': datetime.datetime(2024, 2, 1),
  67. 'retry_interval_days': 7,
  68. 'field1': "expected_value",
  69. 'field2': 10
  70. }
  71. ]
  72. retries = compare_maintenance_tasks(tasks_data)
  73. print("\nTasks needing retry:")
  74. for retry_task in retries:
  75. print(retry_task)

Add your comment