Guest User

Untitled

a guest
Oct 23rd, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. import sys
  2. import traceback
  3.  
  4.  
  5. class Item:
  6. SPACE = ' '
  7. DASH_SPACE = ' - '
  8. def __init__(self, key, name, function, parent=None):
  9. self.key = str(key)
  10. self.name = name
  11. self.function = function
  12. self.parent = parent
  13.  
  14. if parent:
  15. parent.add_item(self)
  16.  
  17. def __str__(self):
  18. return self.SPACE + self.key + self.DASH_SPACE + self.name
  19.  
  20. def execute(self):
  21. print('\n' + self.name + '\n')
  22. return self.function()
  23.  
  24.  
  25. class Menu:
  26. def __init__(self, name, items=None):
  27. self.name = name
  28. self.items = items or []
  29.  
  30. def add_item(self, item):
  31. self.items.append(item)
  32. if item.parent != self:
  33. item.parent = self
  34.  
  35. def remove_item(self, item):
  36. self.items.remove(item)
  37. if item.parent == self:
  38. item.parent = None
  39.  
  40. def __str__(self):
  41. all = ['', self.name, '']
  42. for item in self.items:
  43. all.append(str(item))
  44. return '\n'.join(all)
  45.  
  46. def get_item(self, key):
  47. for item in self.items:
  48. if item.key == key:
  49. return item
  50.  
  51. def execute(self):
  52. while True:
  53. try:
  54. print(self)
  55. choice = raw_input(" >> ")
  56. try:
  57. item = self.get_item(choice)
  58.  
  59. try:
  60. item.execute()
  61. except Exception:
  62. traceback.print_exc()
  63.  
  64. except Exception:
  65. print('Invalid selection, please try again.\n')
  66. except KeyboardInterrupt:
  67. sys.exit()
  68.  
  69.  
  70. if __name__ == "__main__":
  71. # Pass in methods to run for each menu item
  72. menu_items = [
  73. Item(1, 'View Running tasks', view_running_tasks),
  74. Item(2, 'View Task', view_task),
  75. # ...
  76. Item(9, 'Exit', exit)]
  77. menu = Menu('Task Management', items=menu_items)
  78.  
  79. menu.execute()
Add Comment
Please, Sign In to add comment