app.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import logging
  2. import argparse
  3. import sys
  4. import os
  5. class App:
  6. def __init__(self):
  7. # Argument Parser
  8. self.parser = argparse.ArgumentParser()
  9. self.parser.add_argument("-d", "--debug", action="store_true", help="Debug")
  10. # Logging
  11. self.logger = logging.getLogger()
  12. # Application specific initialization
  13. self.init()
  14. def __call__(self):
  15. self.args, _ = self.parser.parse_known_args()
  16. # configure log output
  17. self.log_level = logging.DEBUG if self.args.debug else logging.INFO
  18. self.logger.setLevel(self.log_level)
  19. self.handler = logging.StreamHandler(sys.stdout)
  20. self.handler.setLevel(self.log_level)
  21. self.formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
  22. self.handler.setFormatter(self.formatter)
  23. self.logger.addHandler(self.handler)
  24. # execute requested function
  25. self.before()
  26. return_code = self.call()
  27. self.after()
  28. if isinstance(return_code, int):
  29. exit(return_code)
  30. else:
  31. self.logger.error(f"Missing return code")
  32. exit(255)
  33. def call(self):
  34. if "func" not in self.args:
  35. self.parser.error("Choose something to do")
  36. return self.args.func()
  37. def init(self):
  38. raise Exception("init() is not implemented")
  39. def before(self):
  40. pass
  41. def after(self):
  42. pass