controller.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. import shutil
  3. PATH = os.getcwd() + rf'{os.sep}template'
  4. class NamingError(BaseException):
  5. pass
  6. class ConflictError(BaseException):
  7. pass
  8. class Plugin:
  9. def __init__(self):
  10. self.dir_list = []
  11. self.plugin_list = []
  12. def get_dir(self):
  13. self.dir_list = os.listdir(PATH)
  14. return self.dir_list.copy()
  15. def get_all_plugin(self):
  16. self.get_dir()
  17. self.plugin_list = []
  18. for name in self.dir_list:
  19. try:
  20. plugin = os.listdir(f'{PATH}{os.sep}{name}')
  21. self.plugin_list += [f'{name}{os.sep}{i}' for i in plugin]
  22. finally:
  23. pass
  24. return self.plugin_list.copy()
  25. def get_plugin(self, index):
  26. dir_name = self.dir_list[index]
  27. return [f'{dir_name}{os.sep}{i}' for i in os.listdir(f'{PATH}{os.sep}{dir_name}')]
  28. def add_plugin(self, index, plugin_dir):
  29. plugin_name = os.path.split(plugin_dir)[1]
  30. if plugin_name.startswith('template_') and plugin_name.endswith('.py'):
  31. dir_name = self.dir_list[index]
  32. targets_name = f'{PATH}{os.sep}{dir_name}{os.sep}{plugin_name}'
  33. if os.path.isfile(targets_name):
  34. raise ConflictError
  35. shutil.copyfile(plugin_dir, targets_name)
  36. return self.get_all_plugin()
  37. else:
  38. print(plugin_name)
  39. raise NamingError
  40. def del_plugin(self, index):
  41. targets_name = f'{PATH}{os.sep}{self.plugin_list[index]}'
  42. os.remove(targets_name)
  43. return self.get_all_plugin()
  44. def merge_plugin(self, index, plugin_dir):
  45. plugin_name = os.path.split(plugin_dir)[1]
  46. targets_name = f'{PATH}{os.sep}{self.dir_list[index]}{os.sep}{plugin_name}'
  47. name = plugin_name[9:-3]
  48. with open(targets_name, 'a+') as f:
  49. with open(plugin_dir, 'r') as g:
  50. f.write('\n' + g.read().replace('base = None', f'base = {name}'))
  51. def show_plugin(self, index):
  52. with open(f'{PATH}{os.sep}{self.plugin_list[index]}') as f:
  53. code = f.read() + '\n[END]'
  54. return code, self.plugin_list[index]