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
« 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
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)
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')
24def import_external_repositories(repolist, extpath='/content', reload_internal=False):
25 os.makedirs(extpath, exist_ok=True)
27 for repo in repolist:
28 rppath = os.path.join(extpath, repo)
30 if repo in sys.modules:
31 exmodule = sys.modules[repo]
32 reload_module(repo, exmodule)
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)
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)