Source code for umbr_api.management

#!/usr/bin/env python3
"""API calls to Umbrella Management API.

References:
    https://docs.umbrella.com/umbrella-api/v1.0/reference

"""

import json

from logzero import logger
from tabulate import tabulate

from umbr_api._http_requests import send_get
from umbr_api.credentials import get_base64, get_orgid

MNGT_API_COMMANDS = [
    "networks",
    "roamingcomputers",
    "internalnetworks",
    "virtualappliances",
    "sites",
    "users",
    "roles",
]


[docs]def management_api(command, orgid=None, cred=None, limit=10, page=1, **kwargs): """Send a command to Umbrella Management API.""" assert command in MNGT_API_COMMANDS console = kwargs.get("console", True) cfg_file = kwargs.get("filename", "umbrella.json") api_uri = ( "https://management.api.umbrella.com/v1/organizations" + "/{}/{}?limit={}&page={}".format( get_orgid(orgid, filename=cfg_file), command, limit, page ) ) response = send_get( url=api_uri, headers={ "Authorization": "Basic {}".format( get_base64(cred=cred, filename=cfg_file, api="management") ) }, ) if response.status_code == 200: if console: table = json_to_table(json.loads(response.text)) print(tabulate(table[1:], headers=table[0], tablefmt="simple")) else: logger.error( "HTTP Status code: %s\n%s", response.status_code, response.text ) return response
[docs]def json_to_table(_json): """Convert json object to table.""" table = list() for row in _json: line = list() headers = list() for attribute, value in row.items(): if isinstance(value, dict): for sub_element, sub_value in value.items(): headers.append("\n".join([attribute, sub_element])) if isinstance(sub_value, list): line.append("\n".join(sub_value)) else: line.append(sub_value) else: if isinstance(value, list): line.append("\n".join(value)) else: line.append(value) headers.append(attribute) table.append(line) table.insert(0, headers) return table
[docs]def networks(**kwargs): """Request networks info.""" return management_api("networks", **kwargs)
[docs]def roamingcomputers(**kwargs): """Request roaming computers info.""" return management_api("roamingcomputers", **kwargs)
[docs]def internalnetworks(**kwargs): """Request internal networks info.""" return management_api("internalnetworks", **kwargs)
[docs]def virtualappliances(**kwargs): """Request virtual appliances info.""" return management_api("virtualappliances", **kwargs)
[docs]def sites(**kwargs): """Request sites info.""" return management_api("sites", **kwargs)
[docs]def users(**kwargs): """Request users info.""" return management_api("users", **kwargs)
[docs]def roles(**kwargs): """Request roles info.""" return management_api("roles", **kwargs)
[docs]def main(): """Test if executed directly.""" networks(limit=20, orgid="")
# roamingcomputers() # internalnetworks() # virtualappliances() # sites() # users() # roles() if __name__ == "__main__": main()