file_manager.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import importlib
  2. from pathlib import Path
  3. providers_loaded = False
  4. providers = {}
  5. def load_providers():
  6. global providers_loaded, providers
  7. for file in (Path(__file__).parent.parent / 'providers').glob('*.py'):
  8. if file.stem in ['errors']:
  9. continue
  10. try:
  11. module_ = getattr(importlib.import_module(f'file_management.providers.{file.stem}'),
  12. f'{file.stem.upper()}FileManager')
  13. providers[file.stem] = module_
  14. except (ImportError, AttributeError):
  15. continue
  16. providers_loaded = True
  17. class FileManager:
  18. def __init__(self, uri):
  19. global providers_loaded, providers
  20. if not providers_loaded:
  21. load_providers()
  22. self._uri = uri
  23. provider = providers.get(self._uri.ext()[1:].lower())
  24. if provider is not None:
  25. self._file_manager = provider(uri)
  26. else:
  27. self._file_manager = None
  28. def is_valid(self):
  29. return self._file_manager is not None
  30. def provider_name(self):
  31. if self.is_valid():
  32. return self._file_manager.provider_name()
  33. return ''
  34. def rename_layer(self, target_uri):
  35. if self.is_valid():
  36. self._file_manager.rename_layer(target_uri)
  37. def rename_database(self, target_uri):
  38. if self.is_valid():
  39. self._file_manager.rename_database(target_uri)
  40. def layer_exists(self, target_uri):
  41. if self.is_valid():
  42. return self._file_manager.layer_exists(target_uri)
  43. else:
  44. return False
  45. def database_exists(self, target_uri):
  46. if self.is_valid():
  47. return self._file_manager.database_exists(target_uri)
  48. else:
  49. return False
  50. def ask_overwrite_layer(self, target_uri, iface):
  51. if self.is_valid():
  52. return self._file_manager.ask_overwrite_layer(target_uri, iface)
  53. else:
  54. return True
  55. def ask_overwrite_database(self, target_uri, iface):
  56. if self.is_valid():
  57. return self._file_manager.ask_overwrite_database(target_uri, iface)
  58. else:
  59. return True
  60. def delete_layer(self, target_uri):
  61. if self.is_valid():
  62. return self._file_manager.delete_layer(target_uri)
  63. def delete_database(self, target_uri):
  64. if self.is_valid():
  65. return self._file_manager.delete_database(target_uri)