controller.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. except BaseException:
  22. pass
  23. else:
  24. self.plugin_list += [f'{name}{os.sep}{i}' for i in plugin]
  25. return self.plugin_list.copy()
  26. def get_plugin(self, index):
  27. dir_name = self.dir_list[index]
  28. return [f'{dir_name}{os.sep}{i}' for i in os.listdir(f'{PATH}{os.sep}{dir_name}')]
  29. def add_plugin(self, index, plugin_dir):
  30. plugin_name = os.path.split(plugin_dir)[1]
  31. if plugin_name.startswith('template_') and plugin_name.endswith('.py'):
  32. dir_name = self.dir_list[index]
  33. targets_name = f'{PATH}{os.sep}{dir_name}{os.sep}{plugin_name}'
  34. if os.path.isfile(targets_name):
  35. raise ConflictError
  36. shutil.copyfile(plugin_dir, targets_name)
  37. return self.get_all_plugin()
  38. else:
  39. print(plugin_name)
  40. raise NamingError
  41. def del_plugin(self, index):
  42. targets_name = f'{PATH}{os.sep}{self.plugin_list[index]}'
  43. os.remove(targets_name)
  44. return self.get_all_plugin()
  45. def merge_plugin(self, index, plugin_dir):
  46. plugin_name = os.path.split(plugin_dir)[1]
  47. targets_name = f'{PATH}{os.sep}{self.dir_list[index]}{os.sep}{plugin_name}'
  48. name = plugin_name[9:-3]
  49. with open(targets_name, 'a+') as f:
  50. with open(plugin_dir, 'r') as g:
  51. f.write('\n' + g.read().replace('base = None', f'base = {name}'))
  52. def show_plugin(self, index):
  53. with open(f'{PATH}{os.sep}{self.plugin_list[index]}') as f:
  54. code = f.read() + '\n[END]'
  55. return code, self.plugin_list[index]