Skip to content

Commit 663f655

Browse files
committed
refactor + pass gitlab instance
1 parent bf4bd32 commit 663f655

File tree

10 files changed

+88
-75
lines changed

10 files changed

+88
-75
lines changed

gitlab_submodule/__init__.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
__version__ = '0.1.0'
55
__all__ = [
6-
'GitmodulesSubmodule', 'ProjectSubmodule',
7-
'list_all_project_submodules',
8-
'read_gitlab_submodule',
9-
'iterate_gitlab_project_submodules', 'list_gitlab_project_submodules'
6+
'Submodule', 'Subproject',
7+
'list_submodules',
8+
'submodule_to_subproject',
9+
'iterate_subprojects', 'list_subprojects'
1010
]
1111

12-
from gitlab_submodule.objects import GitmodulesSubmodule, ProjectSubmodule
12+
from gitlab_submodule.objects import Submodule, Subproject
1313
from gitlab_submodule.gitlab_submodule import (
14-
list_all_project_submodules,
15-
read_gitlab_submodule,
16-
iterate_gitlab_project_submodules,
17-
list_gitlab_project_submodules
14+
list_submodules,
15+
submodule_to_subproject,
16+
iterate_subprojects,
17+
list_subprojects
1818
)
Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,60 @@
1-
from typing import List, Optional, Iterable
1+
from typing import List, Optional, Iterable, Union
22

3-
from gitlab.v4.objects import Project
3+
from gitlab import Gitlab
4+
from gitlab.v4.objects import Project, ProjectManager
45

5-
from gitlab_submodule.objects import GitmodulesSubmodule, ProjectSubmodule
6+
from gitlab_submodule.objects import Submodule, Subproject
67
from gitlab_submodule.read_gitmodules import list_project_submodules
78
from gitlab_submodule.gitmodules_to_project import gitmodules_to_project
89
from gitlab_submodule.submodule_commit import get_submodule_commit
910

1011

11-
def list_all_project_submodules(
12-
project: Project,
13-
ref: Optional[str] = None) -> List[GitmodulesSubmodule]:
14-
return list_project_submodules(project, ref)
12+
list_submodules = list_project_submodules
13+
14+
15+
def _get_project_manager(
16+
gitlab_object: Union[Gitlab, ProjectManager]) -> ProjectManager:
17+
if isinstance(gitlab_object, ProjectManager):
18+
return gitlab_object
19+
elif isinstance(gitlab_object, Gitlab):
20+
return gitlab_object.projects
21+
else:
22+
raise TypeError('Needs a Gitlab instance or its ProjectManager')
1523

1624

17-
def read_gitlab_submodule(
18-
gitmodules_submodule: GitmodulesSubmodule,
25+
def submodule_to_subproject(
26+
gitmodules_submodule: Submodule,
27+
gitlab: Union[Gitlab, ProjectManager],
1928
get_latest_commit_possible_if_not_found: bool = True,
2029
get_latest_commit_possible_ref: Optional[str] = None
21-
) -> ProjectSubmodule:
22-
submodule_project = gitmodules_to_project(gitmodules_submodule)
30+
) -> Subproject:
31+
submodule_project = gitmodules_to_project(gitmodules_submodule,
32+
_get_project_manager(gitlab))
2333
submodule_commit, commit_is_exact = get_submodule_commit(
2434
gitmodules_submodule,
2535
submodule_project,
2636
get_latest_commit_possible_if_not_found,
2737
get_latest_commit_possible_ref)
28-
return ProjectSubmodule(
38+
return Subproject(
2939
gitmodules_submodule,
3040
submodule_project,
3141
submodule_commit,
3242
commit_is_exact
3343
)
3444

3545

36-
def iterate_gitlab_project_submodules(
46+
def iterate_subprojects(
3747
project: Project,
48+
gitlab: Union[Gitlab, ProjectManager],
3849
ref: Optional[str] = None,
3950
get_latest_commit_possible_if_not_found: bool = True,
4051
get_latest_commit_possible_ref: Optional[str] = None
41-
) -> Iterable[ProjectSubmodule]:
42-
for gitmodules_submodule in list_all_project_submodules(project, ref):
52+
) -> Iterable[Subproject]:
53+
for gitmodules_submodule in list_project_submodules(project, ref):
4354
try:
44-
yield read_gitlab_submodule(
55+
yield submodule_to_subproject(
4556
gitmodules_submodule,
57+
_get_project_manager(gitlab),
4658
get_latest_commit_possible_if_not_found,
4759
get_latest_commit_possible_ref)
4860
except ValueError:
@@ -51,5 +63,5 @@ def iterate_gitlab_project_submodules(
5163
raise
5264

5365

54-
def list_gitlab_project_submodules(*args, **kwargs) -> List[ProjectSubmodule]:
55-
return list(iterate_gitlab_project_submodules(*args, **kwargs))
66+
def list_subprojects(*args, **kwargs) -> List[Subproject]:
67+
return list(iterate_subprojects(*args, **kwargs))

gitlab_submodule/gitmodules_to_project.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
from posixpath import join, normpath
44
from giturlparse import parse
55

6-
from gitlab import Gitlab
7-
from gitlab.v4.objects import Project
6+
from gitlab.v4.objects import Project, ProjectManager
87

9-
from gitlab_submodule.objects import GitmodulesSubmodule
8+
from gitlab_submodule.objects import Submodule
109

1110

12-
def gitmodules_to_project(submodule: GitmodulesSubmodule) -> Project:
11+
def gitmodules_to_project(submodule: Submodule,
12+
project_manager: ProjectManager) -> Project:
1313
submodule_project_path_with_namespace = \
1414
_submodule_url_to_path_with_namespace(submodule.url,
1515
submodule.parent_project)
1616
if not submodule_project_path_with_namespace:
1717
raise ValueError(
1818
f'submodule at {submodule.url} is not hosted on Gitlab')
19-
gl = Gitlab()
20-
submodule_project = gl.projects.get(submodule_project_path_with_namespace)
19+
submodule_project = project_manager.get(
20+
submodule_project_path_with_namespace)
2121
return submodule_project
2222

2323

@@ -38,8 +38,7 @@ def _submodule_url_to_path_with_namespace(
3838
to_join = [parsed.owner, parsed.repo]
3939
path_with_namespace = join(*to_join)
4040
return path_with_namespace
41-
except Exception as e:
42-
print(e)
41+
except Exception:
4342
# check if the submodule url is a relative path to the project path
4443
if url.startswith('./') or url.startswith('../'):
4544
# we build the path of the submodule project using the path of

gitlab_submodule/objects.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from gitlab.v4.objects import Project, ProjectCommit
22

33

4-
class GitmodulesSubmodule:
4+
class Submodule:
55

66
def __init__(self,
77
parent_project: Project,
@@ -55,9 +55,9 @@ def lstrip(string: str, pattern: str) -> str:
5555
return string
5656

5757

58-
class ProjectSubmodule:
58+
class Subproject:
5959
def __init__(self,
60-
submodule: GitmodulesSubmodule,
60+
submodule: Submodule,
6161
project: Project,
6262
commit: ProjectCommit,
6363
commit_is_exact: bool):

gitlab_submodule/read_gitmodules.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@
44

55
from gitlab.v4.objects import Project
66

7-
from gitlab_submodule.objects import GitmodulesSubmodule
7+
from gitlab_submodule.objects import Submodule
88

99

1010
def list_project_submodules(
1111
project: Project,
12-
ref: Optional[str] = None) -> List[GitmodulesSubmodule]:
12+
ref: Optional[str] = None) -> List[Submodule]:
1313
return list(_get_project_submodules(project, ref))
1414

1515

1616
def _get_project_submodules(
1717
project: Project,
18-
ref: Optional[str] = None) -> Iterable[GitmodulesSubmodule]:
18+
ref: Optional[str] = None) -> Iterable[Submodule]:
1919
gitmodules_file_content = _get_gitmodules_file_content(project, ref)
2020
if not gitmodules_file_content:
2121
return []
2222
for (name, url, path) in _read_gitmodules_file_content(
2323
gitmodules_file_content):
24-
yield GitmodulesSubmodule(
24+
yield Submodule(
2525
parent_project=project,
2626
parent_ref=ref if ref else project.default_branch,
2727
name=name,

gitlab_submodule/submodule_commit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
from gitlab.v4.objects import Project, ProjectCommit
66

7-
from gitlab_submodule.objects import GitmodulesSubmodule
7+
from gitlab_submodule.objects import Submodule
88

99

1010
def get_submodule_commit(
11-
submodule: GitmodulesSubmodule,
11+
submodule: Submodule,
1212
submodule_project: Project,
1313
get_latest_commit_possible_if_not_found: bool = True,
1414
get_latest_commit_possible_ref: Optional[str] = None

tests/test_gitlab_submodule.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
from gitlab import Gitlab
44

5-
from gitlab_submodule.objects import ProjectSubmodule
6-
from gitlab_submodule.gitlab_submodule import (list_all_project_submodules,
7-
read_gitlab_submodule,
8-
list_gitlab_project_submodules)
5+
from gitlab_submodule.objects import Subproject
6+
from gitlab_submodule.gitlab_submodule import (list_submodules,
7+
submodule_to_subproject,
8+
list_subprojects)
99

1010

1111
class TestSubmoduleCommit(unittest.TestCase):
@@ -14,12 +14,12 @@ def test_read_inkscape_submodule_info(self):
1414

1515
gl = Gitlab()
1616
inkscape = gl.projects.get('inkscape/inkscape')
17-
submodules = list_all_project_submodules(
17+
submodules = list_submodules(
1818
inkscape,
1919
ref='e371b2f826adcba316f2e64bbf2f697043373d0b')
2020
submodule = [sub for sub in submodules if
2121
sub.url == 'https://gitlab.com/inkscape/lib2geom.git'][0]
22-
submodule_info: ProjectSubmodule = read_gitlab_submodule(submodule)
22+
submodule_info: Subproject = submodule_to_subproject(submodule, gl)
2323
self.assertEqual(submodule_info.submodule, submodule)
2424

2525
submodule_project = gl.projects.get('inkscape/lib2geom')
@@ -32,8 +32,9 @@ def test_read_inkscape_submodule_info(self):
3232
def test_list_all_inkscape_submodule_info(self):
3333
gl = Gitlab()
3434
inkscape = gl.projects.get('inkscape/inkscape')
35-
submodule_info_list = list_gitlab_project_submodules(
35+
submodule_info_list = list_subprojects(
3636
inkscape,
37+
gl,
3738
ref='e371b2f826adcba316f2e64bbf2f697043373d0b')
3839
for submodule_info in submodule_info_list:
3940
print('- {} -> {}'.format(

tests/test_gitmodules_to_project.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def test_get_inkscape_submodules_as_projects(self):
1717
ref='e371b2f826adcba316f2e64bbf2f697043373d0b'
1818
)
1919
submodule_projects = [
20-
gitmodules_to_project(submodule)
20+
gitmodules_to_project(submodule, gl.projects)
2121
for submodule in submodules
2222
]
2323
self.assertTrue(all(

0 commit comments

Comments
 (0)