-
Notifications
You must be signed in to change notification settings - Fork 0
/
packager_api.py
96 lines (76 loc) · 3.09 KB
/
packager_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from generallibrary import deco_cache
from generalpackager.api.localrepo.base.localrepo import LocalRepo
from generalpackager.api.localmodule import LocalModule
from generalpackager.api.github import GitHub
from generalpackager.api.pypi import PyPI
class _PackagerAPIs:
LocalRepo = LocalRepo
LocalModule = LocalModule
GitHub = GitHub
PyPI = PyPI
Targets = LocalRepo.Targets
API_NOT_AVAILABLE_ERROR = AttributeError
def _assert_target_is_python_or_none(self):
""" :param generalpackager.Packager self: """
if self.target not in (None, self.Targets.python):
raise self.API_NOT_AVAILABLE_ERROR(f"Packager {self}'s target '{self.target}' is not '{self.Targets.python}'")
def _assert_not_private(self):
""" :param generalpackager.Packager self: """
if self.localrepo.metadata.private:
raise self.API_NOT_AVAILABLE_ERROR(f"Packager {self} is private.")
def _available(self, *asserts, api_name, error):
""" :param generalpackager.Packager self: """
try:
for func in asserts:
func()
except self.API_NOT_AVAILABLE_ERROR as e:
if error:
raise self.API_NOT_AVAILABLE_ERROR(f"API '{api_name}' not available.")
else:
return False
else:
return True
def localrepo_available(self, error=False):
""" :param generalpackager.Packager self: """
return self._available(
api_name="LocalRepo", error=error)
def github_available(self, error=False):
""" :param generalpackager.Packager self: """
return self._available(
api_name="GitHub", error=error)
def localmodule_available(self, error=False):
""" :param generalpackager.Packager self: """
return self._available(
self._assert_target_is_python_or_none,
api_name="LocalModule", error=error)
def pypi_available(self, error=False):
""" :param generalpackager.Packager self: """
return self._available(
self._assert_target_is_python_or_none,
self._assert_not_private,
api_name="PyPI", error=error)
@property
@deco_cache()
def localrepo(self):
""" :param generalpackager.Packager self: """
""" :rtype: generalpackager.LocalRepo_Python or generalpackager.LocalRepo_Node """
self.localrepo_available(error=True)
return LocalRepo(path=self.path).targetted(target=self._target)
@property
@deco_cache()
def github(self):
""" :param generalpackager.Packager self: """
self.github_available(error=True)
return GitHub(name=self.name, owner=self._github_owner)
@property
@deco_cache()
def localmodule(self):
""" :param generalpackager.Packager self: """
self.localmodule_available(error=True)
return LocalModule(name=self.name)
@property
@deco_cache()
def pypi(self):
""" :param generalpackager.Packager self: """
self.pypi_available(error=True)
return PyPI(name=self.name, owner=self._pypi_owner)