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")