This repository has been archived by the owner on Aug 27, 2023. It is now read-only.
/
route.py
137 lines (86 loc) · 3.16 KB
/
route.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
""" Tools and resources for traversal routing """
import functools
from typing import Any, Callable, Dict
class IStaticResource(object):
"""Simple resource base class for static-mapping of paths"""
__name__ = ""
__parent__ = None
subobjects = {} # type: Dict[str, Callable[[Any], Any]]
def __init__(self, request):
self.request = request
def __getitem__(self, name):
child = self.subobjects[name](self.request)
child.__parent__ = self
child.__name__ = name
return child
class IResourceFactory(object):
"""Resource that generates child resources from a factory"""
__name__ = ""
__parent__ = None
def __factory__(self, name):
return None
def __init__(self, request):
self.request = request
def __getitem__(self, name):
child = self.__factory__(name) # pylint: disable=E1128
child.__name__ = name
child.__parent__ = self
return child
class SimpleResource(object):
"""Resource for simple pip calls"""
def __init__(self, request):
self.request = request
def __getitem__(self, name):
child = SimplePackageResource(self.request, name)
child.__parent__ = self
child.__name__ = name
return child
class SimplePackageResource(object):
"""Resource for requesting simple endpoint package versions"""
__parent__ = None
__name__ = None
def __init__(self, request, name):
self.request = request
self.name = name
self.__acl__ = request.access.get_acl(self.name)
class APIPackagingResource(IResourceFactory):
"""Resource for api package queries"""
def __init__(self, request):
super(APIPackagingResource, self).__init__(request)
self.__factory__ = functools.partial(APIPackageResource, self.request)
class APIPackageResource(IResourceFactory):
"""Resource for requesting package versions"""
def __init__(self, request, name):
super(APIPackageResource, self).__init__(request)
self.name = name
self.__factory__ = functools.partial(
APIPackageFileResource, self.request, self.name
)
self.__acl__ = request.access.get_acl(self.name)
class APIPackageFileResource(object):
"""Resource for api endpoints dealing with a single package version"""
__parent__ = None
__name__ = None
def __init__(self, request, name, filename):
self.request = request
self.name = name
self.filename = filename
class APIResource(IStaticResource):
"""Resource for api calls"""
subobjects = {"package": APIPackagingResource}
class AdminResource(IStaticResource):
"""Resource for admin calls"""
class PackagesResource(IStaticResource):
"""Resource for cleaner buildout config"""
class Root(IStaticResource):
"""Root context for PyPI Cloud"""
subobjects = {
"api": APIResource,
"admin": AdminResource,
"simple": SimpleResource,
"pypi": SimpleResource,
"packages": PackagesResource,
}
def __init__(self, request):
super(Root, self).__init__(request)
self.__acl__ = request.access.ROOT_ACL