Skip to content

Commit be4a3af

Browse files
committed
refactor!: Move create_project to _internal
1 parent 1a04040 commit be4a3af

File tree

9 files changed

+107
-87
lines changed

9 files changed

+107
-87
lines changed

CHANGES

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ $ pip install --user --upgrade --pre libvcs
1717

1818
- Fix mercurial cloning in {class}`libvcs.projects.hg.MercurialProject`
1919

20+
## libvcs 0.13.6 (2022-06-18)
21+
22+
### Development
23+
24+
- Move `libvcs.shortcuts` to {mod}`libvcs._internal.shortcuts`
25+
2026
## libvcs 0.13.5 (2022-06-18)
2127

2228
### Development

docs/internals/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ dataclasses
1616
query_list
1717
run
1818
subprocess
19+
shortcuts
1920
```

docs/internals/shortcuts.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# `libvcs._internal.shortcuts`
2+
3+
```{eval-rst}
4+
.. autoapimodule:: libvcs._internal.shortcuts
5+
:members:
6+
:show-inheritance:
7+
:undoc-members:
8+
:exclude-members: GitProject, MercurialProject, SubversionProject,
9+
InvalidVCS, VCSLiteral, ProgressCallbackProtocol
10+
```

docs/projects/index.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,6 @@ svn
2323
base
2424
```
2525

26-
## Create from VCS url
27-
28-
Helper methods are available in `libvcs.shortcuts` which can return a repo object from a single
29-
entry-point.
30-
31-
```{eval-rst}
32-
.. autoapimodule:: libvcs.shortcuts
33-
:members:
34-
:exclude-members: GitProject, MercurialProject, SubversionProject
35-
```
36-
37-
See examples below of git, mercurial, and subversion.
38-
3926
## Constants
4027

4128
```{eval-rst}

libvcs/_internal/shortcuts.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""Shortcuts for creating projects.
2+
3+
Note
4+
----
5+
This is an internal API not covered by versioning policy.
6+
"""
7+
import typing as t
8+
from typing import Union
9+
10+
from libvcs import GitProject, MercurialProject, SubversionProject
11+
from libvcs._internal.run import ProgressCallbackProtocol
12+
from libvcs.exc import InvalidVCS
13+
from libvcs.types import VCSLiteral
14+
15+
16+
@t.overload
17+
def create_project(
18+
url: str,
19+
vcs: t.Literal["git"],
20+
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
21+
*args,
22+
**kwargs
23+
) -> GitProject:
24+
...
25+
26+
27+
@t.overload
28+
def create_project(
29+
url: str,
30+
vcs: t.Literal["svn"],
31+
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
32+
*args,
33+
**kwargs
34+
) -> SubversionProject:
35+
...
36+
37+
38+
@t.overload
39+
def create_project(
40+
url: str,
41+
vcs: t.Literal["hg"],
42+
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
43+
*args,
44+
**kwargs
45+
) -> MercurialProject:
46+
...
47+
48+
49+
def create_project(
50+
url: str,
51+
vcs: VCSLiteral,
52+
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
53+
*args,
54+
**kwargs
55+
) -> Union[GitProject, MercurialProject, SubversionProject]:
56+
r"""Return an object representation of a VCS repository.
57+
58+
Examples
59+
--------
60+
>>> from libvcs.shortcuts import create_project
61+
>>> r = create_project(
62+
... url=f'file://{create_git_remote_repo()}',
63+
... vcs='git',
64+
... dir=tmp_path
65+
... )
66+
67+
>>> isinstance(r, GitProject)
68+
True
69+
"""
70+
if vcs == "git":
71+
return GitProject(url=url, progress_callback=progress_callback, *args, **kwargs)
72+
elif vcs == "hg":
73+
return MercurialProject(
74+
url=url, progress_callback=progress_callback, *args, **kwargs
75+
)
76+
elif vcs == "svn":
77+
return SubversionProject(
78+
url=url, progress_callback=progress_callback, *args, **kwargs
79+
)
80+
else:
81+
raise InvalidVCS("VCS %s is not a valid VCS" % vcs)

libvcs/shortcuts.py

Lines changed: 4 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,17 @@
1-
"""Shortcuts"""
2-
import typing as t
31
import warnings
42
from typing import Union
53

64
from libvcs import GitProject, MercurialProject, SubversionProject
7-
from libvcs._internal.run import ProgressCallbackProtocol
8-
from libvcs.exc import InvalidPipURL, InvalidVCS
9-
from libvcs.types import VCSLiteral
5+
from libvcs._internal.shortcuts import create_project as _create_project
6+
from libvcs.exc import InvalidPipURL
107

118

12-
@t.overload
13-
def create_project(
14-
url: str,
15-
vcs: t.Literal["git"],
16-
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
17-
*args,
18-
**kwargs
19-
) -> GitProject:
20-
...
21-
22-
23-
@t.overload
24-
def create_project(
25-
url: str,
26-
vcs: t.Literal["svn"],
27-
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
28-
*args,
29-
**kwargs
30-
) -> SubversionProject:
31-
...
32-
33-
34-
@t.overload
35-
def create_project(
36-
url: str,
37-
vcs: t.Literal["hg"],
38-
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
39-
*args,
40-
**kwargs
41-
) -> MercurialProject:
42-
...
43-
44-
45-
def create_project(
46-
url: str,
47-
vcs: VCSLiteral,
48-
progress_callback: t.Optional[ProgressCallbackProtocol] = None,
49-
*args,
50-
**kwargs
51-
) -> Union[GitProject, MercurialProject, SubversionProject]:
52-
r"""Return an object representation of a VCS repository.
53-
54-
Examples
55-
--------
56-
>>> from libvcs.shortcuts import create_project
57-
>>> r = create_project(
58-
... url=f'file://{create_git_remote_repo()}',
59-
... vcs='git',
60-
... dir=tmp_path
61-
... )
62-
63-
>>> isinstance(r, GitProject)
64-
True
65-
"""
9+
def create_project(*args, **kwargs):
6610
warnings.warn(
6711
"This function will be moved to an internal API in v0.14",
6812
PendingDeprecationWarning,
6913
)
70-
if vcs == "git":
71-
return GitProject(url=url, progress_callback=progress_callback, *args, **kwargs)
72-
elif vcs == "hg":
73-
return MercurialProject(
74-
url=url, progress_callback=progress_callback, *args, **kwargs
75-
)
76-
elif vcs == "svn":
77-
return SubversionProject(
78-
url=url, progress_callback=progress_callback, *args, **kwargs
79-
)
80-
else:
81-
raise InvalidVCS("VCS %s is not a valid VCS" % vcs)
14+
return _create_project(*args, **kwargs)
8215

8316

8417
def create_project_from_pip_url(

tests/projects/test_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
import pytest
66

7+
from libvcs._internal.shortcuts import create_project
78
from libvcs.projects.base import BaseProject, convert_pip_url
8-
from libvcs.shortcuts import create_project
99

1010

1111
def test_repr():

tests/projects/test_hg.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import pytest
55

66
from libvcs._internal.run import run, which
7-
from libvcs.shortcuts import create_project, create_project_from_pip_url
7+
from libvcs._internal.shortcuts import create_project
8+
from libvcs.shortcuts import create_project_from_pip_url
89

910
if not which("hg"):
1011
pytestmark = pytest.mark.skip(reason="hg is not available")

tests/test_shortcuts.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import pytest
44

55
from libvcs import GitProject, MercurialProject, SubversionProject
6+
from libvcs._internal.shortcuts import create_project
67
from libvcs.exc import InvalidPipURL, InvalidVCS
7-
from libvcs.shortcuts import create_project, create_project_from_pip_url
8+
from libvcs.shortcuts import create_project_from_pip_url
89

910

1011
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)