# -*- coding: utf-8 -*-
from requests.auth import HTTPBasicAuth
from sciencelogic.device import Device
import requests
requests.packages.urllib3.disable_warnings()
[docs]class Client(object):
def __init__(self, username, password, uri,
auto_connect=True, verify_ssl=False):
"""
Instantiate a EM7 Client API
:param username: Your username
:type username: ``str``
:param password: Your password
:type password: ``str``
:param uri: The EM7 URI (excluding the /api)
:param uri: ``str``
:param auto_connect: Try an connect and get API data when initializing
:param auto_connect: ``bool``
"""
self.username = username
self.password = password
self.uri = uri
self.verify = verify_ssl
self.session = requests.Session()
self.session.auth = HTTPBasicAuth(username, password)
if auto_connect:
self.sysinfo = self._connect()
def _connect(self):
info = self.get('api/sysinfo')
return info.json()
[docs] def get(self, uri, params=None):
"""
Get a URI from the API
:param uri: The URI
:type uri: ``str``
:params params: Extra params
:type params: ``dict``
"""
if params is None:
params = {}
if uri.startswith('/'):
uri = uri[1:]
return self.session.get('%s/%s' % (self.uri, uri),
params=params,
verify=self.verify)
[docs] def devices(self, details=False, limit=100):
"""
Get a list of devices
:param details: Get the details of the devices
:type details: ``bool``
:param limit: Number of devices to retrieve
:type details: ``int``
:rtype: ``list`` of :class:`Device`
"""
response = self.get('api/device', {'extended_fetch': 1, 'limit': limit}
if details else {'limit': limit})
devices = []
if details:
for uri, device in response.json()['result_set'].items():
devices.append(Device(device, uri, self, True))
else:
for device in response.json()['result_set']:
devices.append(Device(device, device['URI'], self, False))
return devices
[docs] def get_device(self, device_id):
"""
Get a devices
:param device_id: The id of the device
:type device_id: ``int``
:rtype: ``list`` of :class:`Device`
"""
if not isinstance(device_id, int):
raise TypeError('Device ID must be integer')
uri = 'api/device/%s' % device_id
device = self.session.get('%s/%s' % (self.uri, uri)).json()
return Device(device, uri, self, True)