in microservices/user_management/src/routes/permission.py [0:0]
def get_permission_filters_unique(application: Optional[str] = None,
module: Optional[str] = None,
action: Optional[str] = None,
user_group: Optional[str] = None):
"""The get unique permission endpoint will return an array
of unique values for applications, modules, actions and user groups from
firestore
### Query:
application: uuid of application that needs to be filtered
module: uuid of module that needs to be filtered
action: uuid of action that needs to be filtered
user_group: uuid of user_group that needs to be filtered
### Raises:
ResourceNotFoundException: 404 If the permission does not exist
Exception: 500 Internal Server Error if something went wrong
ValidationError: If filter length is more than 30 for any query param
### Returns:
Dict containing list of unique filters for applications,
modules, actions and user groups
"""
try:
permission_collection = Permission.collection
unique_record_keys = ["uuid","name"]
filter_limit_30_reached = False
application_uuid_list = module_uuid_list = None
action_uuid_list = user_group_uuid_list = None
if application:
application_uuid_list = application.split(",")
if len(application_uuid_list) > 30:
filter_limit_30_reached = True
else:
permission_collection = permission_collection.filter(
"application_id", "in", application_uuid_list)
if module:
module_uuid_list = module.split(",")
if len(module_uuid_list) > 30:
filter_limit_30_reached = True
else:
permission_collection = permission_collection.filter(
"module_id", "in", module_uuid_list)
if action:
action_uuid_list = action.split(",")
if len(action_uuid_list) > 30:
filter_limit_30_reached = True
else:
permission_collection = permission_collection.filter(
"action_id", "in", action_uuid_list)
if user_group:
user_group_uuid_list = user_group.split(",")
if len(user_group_uuid_list) > 30:
filter_limit_30_reached = True
else:
permission_collection = permission_collection.filter(
"user_groups", "array_contains_any", user_group_uuid_list)
if filter_limit_30_reached:
raise ValidationError(str("Filter has a limit of 30 values"))
final_data = permission_collection.fetch()
application_id_list = []
module_id_list = []
action_id_list = []
user_group_id_list = []
for each in final_data:
application_id_list.append(each.get_fields()["application_id"])
module_id_list.append(each.get_fields()["module_id"])
action_id_list.append(each.get_fields()["action_id"])
user_group_id_list.extend(each.get_fields()["user_groups"])
if not application_id_list:
unique_applications = []
else:
unique_applications = get_unique_records(
Application.collection.filter(
"uuid", "in", application_id_list).fetch(),unique_record_keys)
if not module_id_list:
unique_modules = []
else:
unique_modules = get_unique_records(
Module.collection.filter(
"uuid", "in", module_id_list).fetch(),unique_record_keys)
if not action_id_list:
unique_actions = []
else:
unique_actions = get_unique_records(
Action.collection.filter(
"uuid", "in", action_id_list).fetch(),unique_record_keys)
if not user_group_id_list:
unique_user_groups = []
else:
unique_user_groups = get_unique_records(
UserGroup.collection.filter(
"uuid", "in",user_group_id_list).fetch(),unique_record_keys)
return {
"success": True,
"message": "Successfully fetched the unique values for " + \
"applications, modules, actions and user_groups.",
"data": {
"applications": unique_applications,
"modules": unique_modules,
"actions": unique_actions,
"user_groups": unique_user_groups
}
}
except ResourceNotFoundException as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise ResourceNotFound(str(e)) from e
except ValidationError as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise BadRequest(str(e)) from e
except Exception as e:
Logger.error(e)
Logger.error(traceback.print_exc())
raise InternalServerError(str(e)) from e