-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAttributes.py
More file actions
109 lines (84 loc) · 3.11 KB
/
Copy pathAttributes.py
File metadata and controls
109 lines (84 loc) · 3.11 KB
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
# EMACS settings: -*- tab-width: 2; indent-tabs-mode: t -*-
# vim: tabstop=2:shiftwidth=2:noexpandtab
# kate: tab-width 2; replace-tabs off; indent-width 2;
# =============================================================================
# _ _ _____ _____ ____ ____ _ ____ _
# _ __ _ _| | | |_ _|_ _| _ \| _ \ ___ __ _ _ _ ___ ___| |_| _ \ ___ _ _| |_ ___ _ __
# | '_ \| | | | |_| | | | | | | |_) | |_) / _ \/ _` | | | |/ _ \/ __| __| |_) / _ \| | | | __/ _ \ '__|
# | |_) | |_| | _ | | | | | | __/| _ < __/ (_| | |_| | __/\__ \ |_| _ < (_) | |_| | || __/ |
# | .__/ \__, |_| |_| |_| |_| |_| |_| \_\___|\__, |\__,_|\___||___/\__|_| \_\___/ \__,_|\__\___|_|
# |_| |___/ |_|
# =============================================================================
# Authors: Patrick Lehmann
#
# Python module: pyAttributes for ReST APIs
#
# Description:
# ------------------------------------
# TODO
#
# License:
# ============================================================================
# Copyright 2017-2019 Patrick Lehmann - Bötzingen, Germany
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
#
from pyAttributes import Attribute, AttributeHelperMixin
from pyHTTPInterface import HTTPMethods
__api__ = [
'RoutingAttribute',
'GETRoute',
'POSTRoute',
'PUTRoute',
'DELETERoute'
]
__all__ = __api__
class RoutingAttribute(Attribute):
_route = None
def __init__(self, path, httpMethods : HTTPMethods):
super().__init__()
from . import Route
self._route = Route(path, httpMethods, None)
@property
def Route(self):
return self._route
@property
def Path(self):
return self._route._path
@property
def HTTPMethods(self):
return self._route._httpMethods
class GETRoute(RoutingAttribute):
def __init__(self, path):
super().__init__(path, HTTPMethods.GET)
class POSTRoute(RoutingAttribute):
def __init__(self, path):
super().__init__(path, HTTPMethods.POST)
class PUTRoute(RoutingAttribute):
def __init__(self, path):
super().__init__(path, HTTPMethods.PUT)
class DELETERoute(RoutingAttribute):
def __init__(self, path):
super().__init__(path, HTTPMethods.DELETE)
class ReSTAPIMixin(AttributeHelperMixin):
__routes = None
def __init__(self, **kwargs):
super().__init__()
self.__routes = []
for _, func in RoutingAttribute.GetMethods(self):
for routeAttribute in RoutingAttribute.GetAttributes(func):
self.__routes.append(routeAttribute.Route)
@property
def Routes(self):
return self.__routes