"""Tenable OT Security==========This package covers the Tenable OT Security interface... autoclass:: TenableOT :members:.. toctree:: :hidden: :glob: assets events plugins"""importosimportwarningsfromtenable.base.platformimportAPIPlatformfromtenable.ot.assetsimportAssetsAPIfromtenable.ot.eventsimportEventsAPIfromtenable.ot.pluginsimportPluginsAPIfromtenable.ot.exports.apiimportExportsAPI
[docs]classTenableOT(APIPlatform):""" The Tenable OT Security object is the primary interaction point for users to interface with Tenable.OT via the pyTenable library. All the API endpoint classes that have been written will be grafted onto this class. Args: api_key (str, optional): The user's API key for Tenable OT Security. If an api key isn't specified, then the library will attempt to read the environment variable ``TOT_API_KEY`` to acquire the key. url (str, optional): The base URL used to connect to the Tenable OT Security service. If a URL isn't specified, then the library will attempt to read the environment variable ``TOT_URL`` to acquire the URL. **kwargs: arguments passed to :class:`tenable.base.platform.APIPlatform` for ConnectionAbortedErrorn management. Examples: Basic Example: >>> from tenable.ot import TenableOT >>> ot = TenableOT(api_key='SECRET_KEY', .. url='https://ot.example.com') Example with proper identification: >>> ot = TenableOT(api_key='SECRET_KEY', ... url='https://ot.example.com', ... vendor='Company Name', ... product='My Awesome Widget', ... build='1.0.0') Example with proper identification leveraging environment variables for the connection parameters: >>> ot = TenableOT(vendor='Company', product='Widget', build='1.0.0') """_env_base="TOT"_ssl_verify=False_conv_json=True_allowed_auth_mech_priority=['key']_allowed_auth_mech_params={'key':['api_key']}def_key_auth(self,api_key,**kwargs):# noqa: PLW0221,PLW0613self._session.headers.update({"X-APIKeys":f"key={api_key}"})self._auth_mech="keys"def_authenticate(self,**kwargs):kwargs["_key_auth_dict"]=kwargs.get("_key_auth_dict",{"api_key":kwargs.get("api_key",os.getenv(f"{self._env_base}_API_KEY"))},)super()._authenticate(**kwargs)
[docs]defgraphql(self,**kwargs):""" GraphQL Endpoint This singular method exposes the GraphQL API to the library. As all keyword arguments are passed directly to the JSON body, it allows for a freeform interface into the GraphQL API. Args: **kwargs (dict, optional): The key/values that should be passed to the body of the GraphQL request. Example: >>> ot.graphql( ... variables={'asset': 'b64 id string'}, ... query=\'\'\' ... query getAssetDetails($asset: ID!) { ... asset(id: $asset) { ... id ... type ... name ... criticality ... location ... } ... } ... \'\'\') """returnself.post("graphql",json=kwargs)
@propertydefassets(self):""" The interface object for the :doc:`Tenable OT Security Assets APIs <assets>`. """returnAssetsAPI(self)@propertydefevents(self):""" The interface object for the :doc:`Tenable OT Security Events APIs <events>`. """returnEventsAPI(self)@propertydefplugins(self):""" The interface object for the :doc:`Tenable OT Security Plugins APIs <plugins>`. """returnPluginsAPI(self)@propertydefexports(self):""" The interface object for the :doc:`Tenable OT Security Exports <exports>`. """returnExportsAPI(self)