Skip to content

Instantly share code, notes, and snippets.

@zakes-it
Last active July 23, 2019 21:00
Show Gist options
  • Select an option

  • Save zakes-it/95ca5a253731cd35aff722c482a64915 to your computer and use it in GitHub Desktop.

Select an option

Save zakes-it/95ca5a253731cd35aff722c482a64915 to your computer and use it in GitHub Desktop.

Revisions

  1. zakes-it revised this gist Jul 23, 2019. 1 changed file with 0 additions and 6 deletions.
    6 changes: 0 additions & 6 deletions d42lib.py
    Original file line number Diff line number Diff line change
    @@ -98,12 +98,6 @@ def add_lifecycle_event(self, event):
    return result.json()


    # class D42Device(object):
    # def __init__(self, data):
    # for key, val in data.iteritems():
    # setattr(self, key, val)


    class D42LifecycleEvent(object):
    def __init__(self, device_id, type_name, user=None, notes=None):
    self.date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
  2. zakes-it created this gist Jul 23, 2019.
    113 changes: 113 additions & 0 deletions d42lib.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,113 @@
    import getpass
    import requests
    import datetime

    from requests.packages.urllib3.exceptions import SubjectAltNameWarning
    requests.packages.urllib3.disable_warnings(SubjectAltNameWarning)


    class D42Server(object):
    def __init__(self, url, username, password=None):
    if not password:
    password = getpass.getpass('Enter Device42 password: ')
    self.rooturl = url.rstrip('/')
    self.api = self.rooturl + '/api/1.0'
    self._session = requests.session()
    self._session.auth = (username, password)
    self._session.headers = {
    'Content-Type': 'application/x-www-form-urlencoded'}
    # test server connection
    self.test_connection()

    def test_connection(self):
    url = '{}/service_level/'.format(self.api)
    result = self._session.get(url)
    result.raise_for_status()

    def get_device(self, serial):
    url = '{}/devices/serial/{}/'.format(self.api, serial)
    result = self._session.get(url)
    data = result.json()
    if data.get('msg', 'OK') == 'device not found':
    return None
    return data

    def get_device_urls(self, device_name):
    url = '{}/device/url/'.format(self.api)
    params = { 'device': device_name }
    result = self._session.get(url, params=params)
    result.raise_for_status()
    return result.json()['device_weblinks']

    def add_device_url(self, device_name, url_type, **kwargs):
    url = '{}/device/url/'.format(self.api)
    params = { 'device': device_name, 'type': url_type }
    keys = ('host', 'port', 'url_suffix', 'notes')
    for key in set(kwargs.iterkeys()).intersection(keys):
    params[key] = kwargs[key]
    result = self._session.post(url, data=params)
    #result.raise_for_status()
    return result.json()

    def get_endusers(self):
    url = '{}/endusers/'.format(self.api)
    result = self._session.get(url)
    result.raise_for_status()
    return result.json()['values']

    def get_buildings(self):
    url = '{}/buildings/'.format(self.api)
    result = self._session.get(url)
    result.raise_for_status()
    return result.json()['buildings']

    def get_rooms(self, building_id=None):
    url = '{}/rooms/'.format(self.api)
    if building_id:
    params = { 'building_id': building_id }
    result = self._session.get(url, params=params)
    else:
    result = self._session.get(url)
    result.raise_for_status()
    return result.json()['rooms']

    def update_device(self, device_id, **kwargs):
    url = '{}/devices/'.format(self.api)
    params = { 'device_id': device_id }
    keys = ('asset_no', 'building', 'storage_room', 'storage_room_id',
    'location', 'notes')
    for key in set(kwargs.iterkeys()).intersection(keys):
    params[key] = kwargs[key]
    result = self._session.put(url, data=params)
    #result.raise_for_status()
    return result.json()

    def add_lifecycle_event(self, event):
    url = '{}/lifecycle_event/'.format(self.api)
    params = {
    'date': event.date,
    'type': event.type,
    'device_id': str(event.device_id)
    }
    if event.user:
    params['user'] = event.user
    if event.notes:
    params['notes'] = event.notes
    result = self._session.put(url, data=params)
    #result.raise_for_status()
    return result.json()


    # class D42Device(object):
    # def __init__(self, data):
    # for key, val in data.iteritems():
    # setattr(self, key, val)


    class D42LifecycleEvent(object):
    def __init__(self, device_id, type_name, user=None, notes=None):
    self.date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
    self.type = type_name
    self.device_id = device_id
    self.user = user
    self.notes = notes