From 75204dcd93a06699669e51f6e34487aacbcde6a7 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Fri, 11 Dec 2020 01:08:37 +0100 Subject: error handling, doc --- phpipam/__init__.py | 21 ++++++++++++++++++++- phpipam/backend.py | 20 -------------------- phpipam/resources.py | 9 ++++++++- 3 files changed, 28 insertions(+), 22 deletions(-) (limited to 'phpipam') diff --git a/phpipam/__init__.py b/phpipam/__init__.py index 89d8280..caf217e 100755 --- a/phpipam/__init__.py +++ b/phpipam/__init__.py @@ -4,12 +4,31 @@ from .resources import phpipamResource class phpipam: """ phpIPAM API Implementation - ReadOnly because I don't need the writing bit + + Attributes + ---------- + sections + subnets + addresses + devices https://phpipam.net/api-documentation/ """ def __init__(self, api_url, app_id, api_user, api_password): + """ + Parameters + ---------- + api_url : str + URL of phpIPAM instance. Example: https://phpipam.example.com/ + app_id : str + AppID configrued in API settings + api_user : str + username, leave empty to use static token authentification + api_password : str + password or static authentification token + """ + self._backend = phpipamBackend(api_url, app_id, api_user, api_password) def __getattr__(self, item): diff --git a/phpipam/backend.py b/phpipam/backend.py index 81af316..64dfcb0 100755 --- a/phpipam/backend.py +++ b/phpipam/backend.py @@ -14,24 +14,6 @@ class apiObjectNotFoundException(Exception): class phpipamBackend: def __init__(self, api_url, app_id, api_user, api_password): - """ - Parameters - ---------- - api_url : str - URL of the phpIPAM instance. Example: https://phpipam.example.com/ - app_id : str - AppID set in phpIPAM API settings - api_user : str - username, leave blank to use static token-authentication - api_password : str - user password or static auth token - - Raises - ------ - apiConnectionException - if the connection/authentification fails - """ - self.api_url = api_url.strip('/') + '/api/' + app_id self.api_user = api_user self.api_password = api_password @@ -62,8 +44,6 @@ class phpipamBackend: return expiration < datetime.datetime.now() def request ( self, method, url, data = {} ): - """Wrapper for _req for checking result and only returning data""" - if self._isTokenExpired(): self._getApiToken() diff --git a/phpipam/resources.py b/phpipam/resources.py index 597560a..5879b14 100755 --- a/phpipam/resources.py +++ b/phpipam/resources.py @@ -29,6 +29,9 @@ class invalidResourceException(Exception): class invalidResourceOperationException(Exception): pass +class invalidResourceOperationArgumentException(Exception): + pass + class phpipamResourceFunction: def __init__(self, backend, resource, function): if not function in resource_types[resource]: @@ -37,14 +40,18 @@ class phpipamResourceFunction: 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}' ) - return self._backend.request( self._function['method'], self._function['request'].format(**kwargs), data=data ) class phpipamResource: def __init__(self, backend, resource): -- cgit v1.2.3