Source code for tenable.tenableone.inventory.findings.api
"""Findings========Methods described in this section relate to the inventory findings API.These methods can be accessed at ``TenableExposureManagement.inventory.findings``... rst-class:: hide-signature.. autoclass:: FindingsAPI :members:"""fromtypingimportOptionalfromurllib.parseimporturlencodefromtenable.base.endpointimportAPIEndpointfromtenable.tenableone.inventory.findings.schemaimportFindingsfromtenable.tenableone.inventory.schemaimportField,Properties,QueryMode,PropertyFilter,SortDirection
[docs]deflist_properties(self)->list[Field]:""" Retrieve finding properties Returns: The finding properties. Examples: >>> properties = tenable_inventory.finding.list_properties() >>> for finding_property in properties: ... pprint(finding_property) """finding_properties_response:dict[str,list[dict]]=self._get(path="api/v1/t1/inventory/findings/properties")returnProperties(**finding_properties_response).data
[docs]deflist(self,query_text:Optional[str]=None,query_mode:Optional[QueryMode]=None,filters:Optional[list[PropertyFilter]]=None,extra_properties:Optional[list[str]]=None,offset:Optional[int]=None,limit:Optional[int]=None,sort_by:Optional[str]=None,sort_direction:Optional[SortDirection]=None,)->Findings:""" Retrieve findings Args: query_text (str, optional): The text to search for. query_mode (QueryMode, optional): The search mode. Defaults to QueryMode.SIMPLE. filters (list, optional): A list of filters to apply. Defaults to None. extra_properties (list, optional): Additional properties to include in the response. Defaults to None. offset (int, optional): Number of records to skip. Defaults to 0. limit (int, optional): Maximum number of records per page. Defaults to 1000. sort_by (str, optional): Field to sort by. sort_direction (SortDirection, optional): Sorting direction, either SortDirection.ASC or SortDirection.DESC. Returns: The request assets. Example: >>> tenable_inventory_findings = tenable_inventory.finding.list() >>> for finding in tenable_inventory_findings: ... pprint(finding) """payload={}# TODO: check what is the actual contractifquery_textisnotNoneandquery_modeisnotNoneandfiltersisnotNone:payload={"query":{"text":query_text,"mode":query_mode.value},"filters":[filter_.model_dump(mode="json")forfilter_infilters]iffiltersisnotNoneelse[],}base_path="api/v1/t1/inventory/findings/search"query_params={}ifextra_propertiesisnotNone:query_params["extra_properties"]=",".join(extra_properties)ifoffsetisnotNone:query_params["offset"]=offsetiflimitisnotNone:query_params["limit"]=limitifsort_byisnotNoneandsort_directionisnotNone:query_params["sort"]=f"{sort_by}:{sort_direction}"ifquery_params:query_string=urlencode(query_params)path=f"{base_path}?{query_string}"else:path=base_pathfindings_response:dict=self._post(path=path,json=payload)returnFindings(**findings_response)