loading.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import os
  2. import sys
  3. from importlib import import_module
  4. import pkgutil
  5. def get_path(module):
  6. if getattr(sys, 'frozen', False):
  7. # frozen
  8. base_dir = os.path.dirname(sys.executable)
  9. lib_dir = os.path.join(base_dir, "lib")
  10. module_to_rel_path = os.path.join(*module.__package__.split("."))
  11. path = os.path.join(lib_dir, module_to_rel_path)
  12. else:
  13. # unfrozen
  14. path = os.path.dirname(os.path.realpath(module.__file__))
  15. return path
  16. def list_module(module):
  17. path = get_path(module)
  18. modules = [name for _, name,
  19. is_pkg in pkgutil.iter_modules([path]) if is_pkg]
  20. return modules
  21. def find_available_locales(providers):
  22. available_locales = set()
  23. for provider_path in providers:
  24. provider_module = import_module(provider_path)
  25. if getattr(provider_module, 'localized', False):
  26. langs = list_module(provider_module)
  27. available_locales.update(langs)
  28. return available_locales
  29. def find_available_providers(modules):
  30. available_providers = set()
  31. for providers_mod in modules:
  32. providers = [
  33. '.'.join([providers_mod.__package__, mod])
  34. for mod in list_module(providers_mod) if mod != '__pycache__'
  35. ]
  36. available_providers.update(providers)
  37. return sorted(available_providers)