Coverage for src/driada/utils/repo.py: 27.27%

33 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-25 15:40 +0300

1import shutil 

2import importlib 

3import git 

4import sys 

5import os 

6from os.path import join 

7 

8def clone_org_repo(repo, org='iabs-neuro', branch='main', path_to_clone=None): 

9 rp = git.Repo.clone_from(f'https://github.com/{org}/{repo}', 

10 branch=branch, 

11 to_path=path_to_clone) 

12 

13 

14def reload_module(name, exmodule, absname=None): 

15 print(f'module "{name}" is already imported, reloading...') 

16 exmodpath = exmodule.__path__[0] 

17 shutil.rmtree(exmodpath) 

18 print(f'Cloning module "{name}" to {exmodpath}...') 

19 clone_org_repo(name.split('.')[-1], path_to_clone=exmodpath) 

20 importlib.reload(exmodule) 

21 print(f'module "{name}" is successfully reloaded') 

22 

23 

24def import_external_repositories(repolist, extpath='/content', reload_internal=False): 

25 os.makedirs(extpath, exist_ok=True) 

26 

27 for repo in repolist: 

28 rppath = os.path.join(extpath, repo) 

29 

30 if repo in sys.modules: 

31 exmodule = sys.modules[repo] 

32 reload_module(repo, exmodule) 

33 

34 if reload_internal: 

35 for module_name in os.listdir(f'{repo}/externals'): 

36 intmodname = f'{repo}.externals.{module_name}' 

37 intmodule = sys.modules[intmodname] 

38 reload_module(intmodname, intmodule) 

39 

40 else: 

41 if repo in os.listdir(extpath): 

42 shutil.rmtree(join(extpath, repo)) 

43 print(f'Cloning module "{repo}" to {extpath}...') 

44 clone_org_repo(repo, path_to_clone=rppath) 

45 importlib.import_module(repo, package=None)