Source code for NGPIris.hci.hci


from NGPIris.parse_credentials import CredentialsHandler
from NGPIris.hci.helpers import (
    get_index_response,
    get_query_response
)
from NGPIris.hci.exceptions import *

from requests import (
    Response,
    post
)
from urllib3 import disable_warnings
from json import load

[docs] class HCIHandler: def __init__(self, credentials_path : str, use_ssl : bool = False) -> None: """ Class for handling HCI requests. :param credentials_path: Path to the JSON credentials file :type credentials_path: str :param use_ssl: Boolean choice between using SSL, defaults to False :type use_ssl: bool, optional """ credentials_handler = CredentialsHandler(credentials_path) self.hci = credentials_handler.hci self.username = self.hci["username"] self.password = self.hci["password"] self.address = self.hci["address"] self.auth_port = self.hci["auth_port"] self.api_port = self.hci["api_port"] self.token = "" self.use_ssl = use_ssl if not self.use_ssl: disable_warnings()
[docs] def request_token(self) -> None: """ Request a token from the HCI, which is stored in the HCIHandler object. The token is used for every operation that needs to send a request to HCI. :raises VPNConnectionError: If there was a problem when requesting a token, a runtime error will be raised """ url = "https://" + self.address + ":" + self.auth_port + "/auth/oauth/" data = { "grant_type": "password", "username": self.username, "password": self.password, "scope": "*", "client_secret": "hci-client", "client_id": "hci-client", "realm": "LOCAL" } try: response : Response = post(url, data = data, verify = self.use_ssl) except: # pragma: no cover error_msg : str = "The token request made at " + url + " failed. Please check your connection and that you have your VPN enabled" raise VPNConnectionError(error_msg) from None token : str = response.json()["access_token"] self.token = token
[docs] def list_index_names(self) -> list[str]: """ Retrieve a list of all index names. :return: A list of index names :rtype: list[str] """ response : Response = get_index_response(self.address, self.api_port, self.token, self.use_ssl) return [entry["name"]for entry in response.json()]
[docs] def look_up_index(self, index_name : str) -> dict: """ Look up index information in the form of a dictionary by submitting the index name. Will return an empty dictionary if no index was found. :param index_name: The index name :type index_name: str :return: A dictionary containing information about an index :rtype: dict """ response : Response = get_index_response(self.address, self.api_port, self.token, self.use_ssl) for entry in response.json(): if entry["name"] == index_name: return dict(entry) return {}
[docs] def raw_query(self, query_dict : dict[str, str]) -> dict: """ Make query to an HCI index, with a dictionary :param query_dict: Dictionary consisting of the query :type query_dict: dict[str, str] :return: Dictionary containing the raw query :rtype: dict """ return dict(get_query_response( query_dict, self.address, self.api_port, self.token, self.use_ssl ).json())
[docs] def raw_query_from_JSON(self, query_path : str) -> dict: """ Make query to an HCI index, with prewritten query in a JSON file :param query_path: Path to the JSON file :type query_path: str :return: Dictionary containing the raw query :rtype: dict """ with open(query_path, "r") as inp: return dict(get_query_response( dict(load(inp)), self.address, self.api_port, self.token, self.use_ssl ).json())