finder.py 969 B

1234567891011121314151617181920212223242526272829303132
  1. import os
  2. from pike import loader
  3. class PikeFinder(object):
  4. def __init__(self, paths=None):
  5. self.paths = paths or []
  6. def module_name_to_filename(self, fullname):
  7. separated_name = fullname.split('.')
  8. return os.path.join(*separated_name)
  9. def get_import_filename(self, module_path):
  10. for base_path in self.paths:
  11. target_path = os.path.join(base_path, module_path)
  12. is_pkg = os.path.isdir(target_path)
  13. if is_pkg:
  14. filename = os.path.join(target_path, '__init__.py')
  15. else:
  16. filename = '{}.py'.format(target_path)
  17. if os.path.exists(filename):
  18. return filename
  19. def find_module(self, fullname, path=None):
  20. converted_name = self.module_name_to_filename(fullname)
  21. module_path = self.get_import_filename(converted_name)
  22. if module_path:
  23. return loader.PikeLoader(fullname, module_path)