From 769785c2992e0985922fca148e84ee2cd4a05144 Mon Sep 17 00:00:00 2001 From: Justin Chung <20733699+justin13888@users.noreply.github.com> Date: Thu, 13 Oct 2022 17:52:01 -0400 Subject: [PATCH] Implement TUI support for multiple users in each position --- ceod/api/positions.py | 10 +++++++--- .../members/UpdateMemberPositionsTransaction.py | 13 ++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ceod/api/positions.py b/ceod/api/positions.py index a194565..b23af20 100644 --- a/ceod/api/positions.py +++ b/ceod/api/positions.py @@ -15,7 +15,10 @@ def get_positions(): positions = {} for user in ldap_srv.get_users_with_positions(): for position in user.positions: - positions[position] = user.uid + if position in positions: + positions[position] += f", {user.uid}" + else: + positions[position] = user.uid return positions @@ -29,9 +32,10 @@ def update_positions(): required = cfg.get('positions_required') available = cfg.get('positions_available') - # remove falsy values + # remove falsy values and parse multiple users in each position + # Example: "user1,user2, user3" -> ["user1","user2","user3"] body = { - positions: username for positions, username in body.items() + positions: username.replace(' ','').split(',') for positions, username in body.items() if username } diff --git a/ceod/transactions/members/UpdateMemberPositionsTransaction.py b/ceod/transactions/members/UpdateMemberPositionsTransaction.py index 32ac77e..56fff2d 100644 --- a/ceod/transactions/members/UpdateMemberPositionsTransaction.py +++ b/ceod/transactions/members/UpdateMemberPositionsTransaction.py @@ -2,6 +2,7 @@ from collections import defaultdict from typing import Dict from zope import component +from typing import Union from ..AbstractTransaction import AbstractTransaction from ceo_common.interfaces import ILDAPService, IConfig, IUser @@ -20,7 +21,7 @@ class UpdateMemberPositionsTransaction(AbstractTransaction): 'subscribe_to_mailing_lists', ] - def __init__(self, positions_reversed: Dict[str, str]): + def __init__(self, positions_reversed: Dict[str, Union[str,list]]): # positions_reversed is position -> username super().__init__() self.ldap_srv = component.getUtility(ILDAPService) @@ -28,8 +29,14 @@ class UpdateMemberPositionsTransaction(AbstractTransaction): # Reverse the dict so it's easier to use (username -> positions) self.positions = defaultdict(list) for position, username in positions_reversed.items(): - self.positions[username].append(position) - + if isinstance(username, str): + self.positions[username].append(position) + elif isinstance(username, list): + for user in username: + self.positions[user].append(position) + else: + raise TypeError("Username(s) under each position must either be a string or a list") + # a cached Dict of the Users who need to be modified (username -> User) self.users: Dict[str, IUser] = {}