callback.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # mypy: allow-untyped-defs
  2. class CompilationCallbackHandler:
  3. def __init__(self):
  4. self.start_callbacks = []
  5. self.end_callbacks = []
  6. def register_start_callback(self, callback):
  7. """
  8. Register a callback function to be called when the compilation starts.
  9. Args:
  10. - callback (callable): The callback function to register.
  11. """
  12. self.start_callbacks.append(callback)
  13. return callback
  14. def register_end_callback(self, callback):
  15. """
  16. Register a callback function to be called when the compilation ends.
  17. Args:
  18. - callback (callable): The callback function to register.
  19. """
  20. self.end_callbacks.append(callback)
  21. return callback
  22. def remove_start_callback(self, callback):
  23. """
  24. Remove a registered start callback function.
  25. Args:
  26. - callback (callable): The callback function to remove.
  27. """
  28. self.start_callbacks.remove(callback)
  29. def remove_end_callback(self, callback):
  30. """
  31. Remove a registered end callback function.
  32. Args:
  33. - callback (callable): The callback function to remove.
  34. """
  35. self.end_callbacks.remove(callback)
  36. def run_start_callbacks(self):
  37. """
  38. Execute all registered start callbacks.
  39. """
  40. for callback in self.start_callbacks:
  41. callback()
  42. def run_end_callbacks(self):
  43. """
  44. Execute all registered end callbacks.
  45. """
  46. for callback in self.end_callbacks:
  47. callback()
  48. def clear(self):
  49. """
  50. Clear all registered callbacks.
  51. """
  52. self.start_callbacks.clear()
  53. self.end_callbacks.clear()
  54. callback_handler = CompilationCallbackHandler()
  55. def on_compile_start(callback):
  56. """
  57. Decorator to register a callback function for the start of the compilation.
  58. """
  59. callback_handler.register_start_callback(callback)
  60. return callback
  61. def on_compile_end(callback):
  62. """
  63. Decorator to register a callback function for the end of the compilation.
  64. """
  65. callback_handler.register_end_callback(callback)
  66. return callback