From 17bd5b60a6d1445d208c1486c5b937c7f7881154 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Fri, 11 Dec 2020 00:23:25 +0100 Subject: rework --- phpipam/resources.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 phpipam/resources.py (limited to 'phpipam/resources.py') diff --git a/phpipam/resources.py b/phpipam/resources.py new file mode 100755 index 0000000..597560a --- /dev/null +++ b/phpipam/resources.py @@ -0,0 +1,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}') -- cgit v1.2.3