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
|
from .backend import phpipamBackend
resource_types = {
'sections' : {
'getSubnets':{
'method':'GET',
'request':'/sections/{object_id}/subnets',
}
},
'subnets' : {
'search':{
'method':'GET',
'request':'/subnets/search/{search}'
},
'getIP':{
'method':'GET',
'requests':'/subnets/'
}
},
'addresses' : {
},
'devices' : {
},
}
class invalidResourceException(Exception):
pass
class invalidResourceOperationException(Exception):
pass
class phpipamResourceFunction:
def __init__(self, backend, resource, function):
if not function in resource_types[resource]:
raise invalidResourceOperationException(f'Operation {function} is not defined for {resource}.')
self._backend = backend
self._resource = resource
self._function = resource_types[resource][function]
def __call__(self, **kwargs):
if 'data' in kwargs:
data = kwargs['data']
else:
data = {}
return self._backend.request( self._function['method'], self._function['request'].format(**kwargs), data=data )
class phpipamResource:
def __init__(self, backend, resource):
if not resource in resource_types:
raise invalidResourceException(f'Invalid resource "{resource}"')
self._type = resource
self._backend = backend
def __getattr__(self, attr):
return phpipamResourceFunction(self._backend, self._type, attr)
def get(self):
"""List of all objects"""
return self._backend.request('GET', f'/{self._type}')
def byID(self, object_id):
"""object identified by object_id : str"""
return self._backend.request('GET', f'/{self._type}/{object_id}')
|