1. import schedule
  2. import time
  3. import logging
  4. import os
  5. # Configure logging
  6. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  7. def validate_input(func):
  8. """Decorator to validate user input."""
  9. def wrapper(*args, **kwargs):
  10. try:
  11. # Get user input
  12. user_input = input(f"Enter value for {func.__name__}: ")
  13. # Perform validation based on the function's expected type
  14. if func.__name__ == 'get_number':
  15. return float(user_input)
  16. elif func.__name__ == 'get_string':
  17. return user_input
  18. elif func.__name__ == 'get_boolean':
  19. user_input = user_input.lower()
  20. if user_input in ['true', 't', 'yes', 'y', '1']:
  21. return True
  22. elif user_input in ['false', 'f', 'no', 'n', '0']:
  23. return False
  24. else:
  25. raise ValueError("Invalid boolean input. Use true/false, yes/no, 1/0.")
  26. else:
  27. return user_input # Assume string if type not explicitly handled
  28. except ValueError as e:
  29. logging.error(f"Invalid input for {func.__name__}: {e}")
  30. print(f"Invalid input. Please enter a valid value.")
  31. return None # Or raise the exception, depending on desired behavior
  32. except Exception as e:
  33. logging.error(f"Unexpected error during input: {e}")
  34. print(f"An unexpected error occurred. Please check your input.")
  35. return None
  36. return wrapper
  37. @validate_input
  38. def get_number():
  39. """Gets a number from the user."""
  40. pass
  41. @validate_input
  42. def get_string():
  43. """Gets a string from the user."""
  44. pass
  45. @validate_input
  46. def get_boolean():
  47. """Gets a boolean from the user."""
  48. pass
  49. def scheduled_task(arg1, arg2):
  50. """Example scheduled task."""
  51. logging.info(f"Running scheduled task with arguments: {arg1}, {arg2}")
  52. try:
  53. # Simulate some work
  54. time.sleep(2)
  55. logging.info("Task completed successfully.")
  56. except Exception as e:
  57. logging.error(f"Error during task execution: {e}")
  58. def prepare_scheduled_runs():
  59. """Prepares the environment for scheduled runs."""
  60. # Get arguments from user
  61. arg1 = get_number()
  62. arg2 = get_string()
  63. boolean_arg = get_boolean()
  64. if arg1 is None or arg2 is None or boolean_arg is None:
  65. logging.error("Required arguments are missing. Aborting.")
  66. return
  67. # Check if required files exist
  68. if not os.path.exists("data.txt"):
  69. logging.warning("data.txt not found. Creating an empty file.")
  70. with open("data.txt", "w") as f:
  71. pass
  72. # Configure schedule
  73. schedule.every(10).seconds.do(scheduled_task, arg1, arg2) #example schedule
  74. # schedule.every().hour.do(scheduled_task, arg1, arg2) #example schedule
  75. logging.info("Scheduled tasks prepared successfully.")
  76. if __name__ == "__main__":
  77. prepare_scheduled_runs()
  78. while True:
  79. schedule.run_pending()
  80. time.sleep(1)

Add your comment