def execute()

in client/python/cli/command/principals.py [0:0]


    def execute(self, api: PolarisDefaultApi) -> None:
        if self.principals_subcommand == Subcommands.CREATE:
            request = CreatePrincipalRequest(
                principal=Principal(
                    type=self.type.upper(),
                    name=self.principal_name,
                    client_id=self.client_id,
                    properties=self.properties
                )
            )
            print(api.create_principal(request).credentials.to_json())
        elif self.principals_subcommand == Subcommands.DELETE:
            api.delete_principal(self.principal_name)
        elif self.principals_subcommand == Subcommands.GET:
            print(api.get_principal(self.principal_name).to_json())
        elif self.principals_subcommand == Subcommands.LIST:
            if self.principal_role:
                for principal in api.list_assignee_principals_for_principal_role(self.principal_role).principals:
                    print(principal.to_json())
            else:
                for principal in api.list_principals().principals:
                    print(principal.to_json())
        elif self.principals_subcommand == Subcommands.ROTATE_CREDENTIALS:
            print(api.rotate_credentials(self.principal_name).to_json())
        elif self.principals_subcommand == Subcommands.UPDATE:
            principal = api.get_principal(self.principal_name)
            new_properties = principal.properties or {}

            # Add or update all entries specified in set_properties
            if self.set_properties:
                new_properties = {**new_properties, **self.set_properties}

            # Remove all keys specified in remove_properties
            if self.remove_properties:
                for to_remove in self.remove_properties:
                    new_properties.pop(to_remove, None)

            request = UpdatePrincipalRequest(
                current_entity_version=principal.entity_version,
                properties=new_properties
            )
            api.update_principal(self.principal_name, request)
        elif self.principals_subcommand == Subcommands.ACCESS:
            principal = api.get_principal(self.principal_name).to_dict()['name']
            principal_roles = self._get_principal_roles(api)

            # Initialize the result structure
            result = {
                'principal': principal,
                'principal_roles': []
            }
            
            # Construct the result structure for each principal role
            for principal_role in principal_roles:
                role_data = {
                    'name': principal_role,
                    'catalog_roles': []
                }
                # For each catalog role, get associated privileges
                for catalog in self._get_catalogs(api):
                    catalog_roles = self._get_catalog_roles(api, principal_role, catalog)
                    for catalog_role in catalog_roles:
                        catalog_data = {
                            'name': catalog_role,
                            'catalog': catalog,
                            'privileges': []
                        }
                        catalog_data['privileges'] = list(self._get_privileges(api, catalog_data['catalog'], catalog_role))
                        role_data['catalog_roles'].append(catalog_data)
                result['principal_roles'].append(role_data)
            print(json.dumps(result))
        else:
            raise Exception(f"{self.principals_subcommand} is not supported in the CLI")