Rewrite function that builds form data for app environment roles form.
- Adds a property to ApplicationRole model so that it knows its related EnvironmentRole models. - Rewrite the form data builder in the routes file so that it loops the application members and their environment roles to build the data structure.
This commit is contained in:
@@ -30,54 +30,54 @@ def get_environments_obj_for_app(application):
|
||||
return environments_obj
|
||||
|
||||
|
||||
def serialize_members(member_list, role):
|
||||
serialized_list = []
|
||||
|
||||
for member in member_list:
|
||||
serialized_list.append(
|
||||
{
|
||||
"user_id": str(member.user_id),
|
||||
"user_name": member.user.full_name,
|
||||
"role_name": role,
|
||||
}
|
||||
)
|
||||
|
||||
return serialized_list
|
||||
|
||||
|
||||
def sort_env_users_by_role(env):
|
||||
users_list = []
|
||||
no_access_users = env.application.users - env.users
|
||||
no_access_list = [
|
||||
{"user_id": str(user.id), "user_name": user.full_name, "role_name": NO_ACCESS}
|
||||
for user in no_access_users
|
||||
]
|
||||
users_list.append({"role": NO_ACCESS, "members": no_access_list})
|
||||
|
||||
for role in CSPRole:
|
||||
users_list.append(
|
||||
{
|
||||
"role": role.value,
|
||||
"members": serialize_members(
|
||||
Environments.get_members_by_role(env, role.value), role.value
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
return users_list
|
||||
|
||||
|
||||
def data_for_app_env_roles_form(application):
|
||||
data = {"envs": []}
|
||||
for environment in application.environments:
|
||||
data["envs"].append(
|
||||
{
|
||||
"env_id": environment.id,
|
||||
"team_roles": sort_env_users_by_role(environment),
|
||||
}
|
||||
)
|
||||
csp_roles = [role.value for role in CSPRole]
|
||||
csp_roles.insert(0, NO_ACCESS)
|
||||
# dictionary for sorting application members by environments
|
||||
# and roles within those environments
|
||||
environments_dict = {
|
||||
e.id: {role_name: [] for role_name in csp_roles}
|
||||
for e in application.environments
|
||||
}
|
||||
for member in application.members:
|
||||
env_ids = set(environments_dict.keys())
|
||||
for env_role in member.environment_roles:
|
||||
role_members_list = environments_dict[env_role.environment_id][
|
||||
env_role.role
|
||||
]
|
||||
role_members_list.append(
|
||||
{
|
||||
"user_id": str(member.user.id),
|
||||
"user_name": member.user_name,
|
||||
"role_name": env_role.role,
|
||||
}
|
||||
)
|
||||
env_ids.remove(env_role.environment_id)
|
||||
|
||||
return data
|
||||
# any leftover environment IDs are ones the app member
|
||||
# does not have access to
|
||||
for env_id in env_ids:
|
||||
role_members_list = environments_dict[env_id][NO_ACCESS]
|
||||
role_members_list.append(
|
||||
{
|
||||
"user_id": str(member.user.id),
|
||||
"user_name": member.user_name,
|
||||
"role_name": NO_ACCESS,
|
||||
}
|
||||
)
|
||||
|
||||
# transform the data into the shape the form needs
|
||||
nested_data = [
|
||||
{
|
||||
"env_id": env_id,
|
||||
"team_roles": [
|
||||
{"role": role, "members": members} for role, members in roles.items()
|
||||
],
|
||||
}
|
||||
for env_id, roles in environments_dict.items()
|
||||
]
|
||||
|
||||
return {"envs": nested_data}
|
||||
|
||||
|
||||
def check_users_are_in_application(user_ids, application):
|
||||
|
||||
Reference in New Issue
Block a user