Source code for ibm_watsonx_ai.gateway.policies

#  -----------------------------------------------------------------------------------------
#  (C) Copyright IBM Corp. 2025.
#  https://opensource.org/licenses/BSD-3-Clause
#  -----------------------------------------------------------------------------------------
import pandas as pd

from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai.wml_resource import WMLResource


[docs] class Policies(WMLResource): """Model Gateway policies class.""" def __init__(self, api_client: APIClient): WMLResource.__init__(self, __name__, api_client)
[docs] def create( self, action: str, resource: str, subject: str, effect: str | None = None ) -> None: """Create policy. :param action: action for policy :type action: str :param resource: resource for policy :type resource: str :param subject: subject for policy :type subject: str :param effect: effect for policy :type effect: str, optional """ request_json = {"action": action, "resource": resource, "subject": subject} if effect: request_json["effect"] = effect response = self._client.httpx_client.post( self._client._href_definitions.get_gateway_policies_href(), headers=self._client._get_headers(), json=request_json, ) self._handle_response(204, "policy creation", response, json_response=False)
[docs] def delete( self, action: str, resource: str, subject: str, effect: str | None = None ) -> str: """Delete policy. :param action: action for policy :type action: str :param resource: resource for policy :type resource: str :param subject: subject for policy :type subject: str :param effect: effect for policy :type effect: str, optional :return: status ("SUCCESS" if succeeded) :rtype: str """ request_json = {"action": action, "resource": resource, "subject": subject} if effect: request_json["effect"] = effect response = self._client._session.delete( self._client._href_definitions.get_gateway_policies_href(), headers=self._client._get_headers(), json=request_json, ) return self._handle_response( 204, "policy deletion", response, json_response=False )
[docs] def get_details(self) -> dict: """Get policies details. :returns: policies details :rtype: dict """ response = self._client.httpx_client.get( self._client._href_definitions.get_gateway_policies_href(), headers=self._client._get_headers(), ) return self._handle_response(200, "policy listing", response)
[docs] def list(self) -> pd.DataFrame: """List policies. :returns: dataframe with policies details :rtype: pandas.DataFrame """ policies_details = self.get_details()["data"] policies_values = [ (m["resource"], m["action"], m["subject"], m.get("effect", "")) for m in policies_details ] table = self._list( policies_values, ["RESOURCE", "ACTION", "SUBJECT", "EFFECT"], limit=None ) return table