aboutsummaryrefslogtreecommitdiff
path: root/phpipam/resources.py
blob: 5879b14862dca49fc7d655a86acfb60b674d9217 (plain)
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
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 invalidResourceOperationArgumentException(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]
        self._name = function

    def __call__(self, **kwargs):
        if 'data' in kwargs:
            data = kwargs['data']
        else:
            data = {}
        try:
            return self._backend.request( self._function['method'], self._function['request'].format(**kwargs), data=data )
        except KeyError as e:
            raise invalidResourceOperationArgumentException( f'{self._resource}.{self._name}: Missing arguments: {e.args}' )


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}')