Source code for zenossapi.routers

# -*- coding: utf-8 -*-

import requests
from requests.exceptions import ConnectionError
from zenossapi.apiclient import ZenossAPIClientError, ZenossAPIClientAuthenticationError


[docs]class ZenossRouter(object): """ Base class for Zenoss router classes """ def __init__(self, url, headers, ssl_verify, endpoint, action): self.api_url = url self.api_headers = headers self.ssl_verify = ssl_verify self.api_endpoint = endpoint self.api_action = action def _check_uid(self, uid): if not uid.startswith('Devices'): if uid.startswith('/'): uid = 'Devices{0}'.format(uid) else: uid = 'Devices/{0}'.format(uid) return uid def _make_request_data(self, method, data): return dict( action=self.api_action, method=method, data=[data], tid=1, ) def _router_request(self, data): # Disable warnings from urllib3 if ssl_verify is False, otherwise # every request will print an InsecureRequestWarning if not self.ssl_verify: requests.urllib3.disable_warnings() try: response = requests.post( '{0}/{1}'.format(self.api_url, self.api_endpoint), headers=self.api_headers, json=data, verify=self.ssl_verify, ) except ConnectionError as e: raise ZenossAPIClientError( 'Unable to connect to Zenoss server {0}'.format(self.api_url) ) if response.ok: if response.url.find('login_form') > -1: raise ZenossAPIClientAuthenticationError('API Login Failed') response_json = response.json() if 'result' in response_json: if response_json['result']: if 'success' in response_json['result']: if not response_json['result']['success']: raise ZenossAPIClientError('Request failed: {}'.format(response_json['result']['msg'])) else: raise ZenossAPIClientError('Request failed, no response data returned!') return response_json['result'] else: raise ZenossAPIClientError('Request failed: {0} {1}'.format(response.status_code, response.reason))