Skip to content

Commit df8980e

Browse files
committed
Simplify add and delete methods to only accept a single user/group for consistency.
1 parent fb2178f commit df8980e

File tree

3 files changed

+61
-71
lines changed

3 files changed

+61
-71
lines changed

src/posit/connect/groups.py

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,17 @@ def __init__(self, ctx: Context, group_guid: str) -> None:
7474
self._ctx: Context = ctx
7575

7676
@overload
77-
def add(self, *args: User) -> None: ...
77+
def add(self, user: User, /) -> None: ...
7878
@overload
79-
def add(self, *, user_guid: str) -> None: ...
79+
def add(self, /, *, user_guid: str) -> None: ...
8080

81-
def add(self, *args: User, user_guid: Optional[str] = None) -> None:
81+
def add(self, user: Optional[User] = None, /, *, user_guid: Optional[str] = None) -> None:
8282
"""Add a user to the group.
8383
8484
Parameters
8585
----------
86-
*args : User
87-
User objects to add to the group.
86+
user : User
87+
User object to add to the group. Only one of `user=` or `user_guid=` can be provided.
8888
user_guid : str
8989
The user GUID.
9090
@@ -103,7 +103,8 @@ def add(self, *args: User, user_guid: Optional[str] = None) -> None:
103103
104104
# Add multiple users to the group
105105
users = client.users.find()
106-
group.members.add(*users)
106+
for user in users:
107+
group.members.add(user)
107108
108109
# Add a user to the group by GUID
109110
group.members.add(user_guid="USER_GUID_HERE")
@@ -113,19 +114,15 @@ def add(self, *args: User, user_guid: Optional[str] = None) -> None:
113114
--------
114115
* https://docs.posit.co/connect/api/#post-/v1/groups/-group_guid-/members
115116
"""
116-
if len(args) > 0:
117+
if user is not None:
117118
from .users import User
118119

119120
if user_guid:
120-
raise ValueError("Only one of `*args` or `user_guid=` should be provided.")
121-
for i, user in enumerate(args):
122-
if not isinstance(user, User):
123-
raise TypeError(f"args[{i}] is not a `User` object. Received {user}")
121+
raise ValueError("Only one of `user=` or `user_guid=` should be provided.")
122+
if not isinstance(user, User):
123+
raise TypeError(f"`user=` is not a `User` object. Received {user}")
124124

125-
for user in args:
126-
self.add(user_guid=user["guid"])
127-
128-
return
125+
user_guid = user["guid"]
129126

130127
if not isinstance(user_guid, str):
131128
raise TypeError(f"`user_guid=` should be a string. Received {user_guid}")
@@ -137,17 +134,17 @@ def add(self, *args: User, user_guid: Optional[str] = None) -> None:
137134
self._ctx.session.post(url, json={"user_guid": user_guid})
138135

139136
@overload
140-
def delete(self, *args: User) -> None: ...
137+
def delete(self, user: User, /) -> None: ...
141138
@overload
142-
def delete(self, *, user_guid: str) -> None: ...
139+
def delete(self, /, *, user_guid: str) -> None: ...
143140

144-
def delete(self, *args: User, user_guid: Optional[str] = None) -> None:
141+
def delete(self, user: Optional[User] = None, /, *, user_guid: Optional[str] = None) -> None:
145142
"""Remove a user from the group.
146143
147144
Parameters
148145
----------
149-
*args : User
150-
User objects to remove from the group.
146+
user : User
147+
User object to add to the group. Only one of `user=` or `user_guid=` can be provided.
151148
user_guid : str
152149
The user GUID.
153150
@@ -166,7 +163,8 @@ def delete(self, *args: User, user_guid: Optional[str] = None) -> None:
166163
167164
# Remove multiple users from the group
168165
group_users = group.members.find()[:2]
169-
group.members.delete(*group_users)
166+
for group_user in group_users:
167+
group.members.delete(group_user)
170168
171169
# Remove a user from the group by GUID
172170
group.members.delete(user_guid="USER_GUID_HERE")
@@ -176,19 +174,15 @@ def delete(self, *args: User, user_guid: Optional[str] = None) -> None:
176174
--------
177175
* https://docs.posit.co/connect/api/#delete-/v1/groups/-group_guid-/members/-user_guid-
178176
"""
179-
if len(args) > 0:
177+
if user is not None:
180178
from .users import User
181179

182180
if user_guid:
183-
raise ValueError("Only one of `*args` or `user_guid=` should be provided.")
184-
for i, user in enumerate(args):
185-
if not isinstance(user, User):
186-
raise TypeError(f"`args[{i}]` is not a `User` object. Received {user}")
187-
188-
for user in args:
189-
self.delete(user_guid=user["guid"])
181+
raise ValueError("Only one of `user=` or `user_guid=` should be provided.")
182+
if not isinstance(user, User):
183+
raise TypeError(f"`user=` is not a `User` object. Received {user}")
190184

191-
return
185+
user_guid = user["guid"]
192186

193187
if not isinstance(user_guid, str):
194188
raise TypeError(f"`user_guid=` should be a string. Received {user_guid}")

src/posit/connect/users.py

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -170,22 +170,19 @@ def __init__(self, ctx: Context, user_guid: str) -> None:
170170
self._user_guid: str = user_guid
171171

172172
@overload
173-
def add(self, *args: Group) -> None: ...
173+
def add(self, group: Group, /) -> None: ...
174174
@overload
175-
def add(self, *, group_guid: str) -> None: ...
175+
def add(self, /, *, group_guid: str) -> None: ...
176176

177-
def add(
178-
self,
179-
*args: Group,
180-
group_guid: Optional[str] = None,
181-
) -> None:
177+
def add(self, group: Optional[Group] = None, /, *, group_guid: Optional[str] = None) -> None:
182178
"""
183-
Add the user to the specified groups.
179+
Add the user to the specified group.
184180
185181
Parameters
186182
----------
187-
*args : Group
188-
The groups to which the user will be added.
183+
group : Group
184+
The groups to which the user will be added. Only one of `group=` or `group_guid=` can
185+
be provided.
189186
group_guid : str
190187
The unique identifier (guid) of the group to which the user will be added.
191188
@@ -211,7 +208,8 @@ def add(
211208
client.groups.get("GROUP_GUID_1"),
212209
client.groups.get("GROUP_GUID_2"),
213210
]
214-
user.groups.add(*groups)
211+
for group in groups:
212+
user.groups.add(group)
215213
216214
# Add the user to a group by GUID
217215
user.groups.add(group_guid="GROUP_GUID_HERE")
@@ -221,43 +219,44 @@ def add(
221219
--------
222220
* https://docs.posit.co/connect/api/#post-/v1/groups/-group_guid-/members
223221
"""
224-
if len(args) > 0:
222+
if group is not None:
225223
from .groups import Group
226224

227225
if group_guid:
228-
raise ValueError("Only one of `*args` or `group_guid` may be be provided.")
229-
230-
for i, group in enumerate(args):
231-
if not isinstance(group, Group):
232-
raise TypeError(
233-
f"`args[{i}]` is not an instance of Group. Received {group}",
234-
)
235-
for group in args:
236-
group.members.add(user_guid=self._user_guid)
226+
raise ValueError("Only one of `group=` or `group_guid` may be be provided.")
227+
228+
if not isinstance(group, Group):
229+
raise TypeError(
230+
f"`group=` is not an instance of Group. Received {group}",
231+
)
232+
group.members.add(user_guid=self._user_guid)
237233
return
238234

239235
if not group_guid:
240-
raise ValueError("Only one of `*args` or `group_guid` may be be provided.")
236+
raise ValueError("Only one of `group=` or `group_guid` may be be provided.")
241237
group = self._ctx.client.groups.get(group_guid)
242238
group.members.add(user_guid=self._user_guid)
243239

244240
@overload
245-
def delete(self, *args: Group) -> None: ...
241+
def delete(self, group: Group, /) -> None: ...
246242
@overload
247-
def delete(self, *, group_guid: str) -> None: ...
243+
def delete(self, /, *, group_guid: str) -> None: ...
248244

249245
def delete(
250246
self,
251-
*args: Group,
247+
group: Optional[Group] = None,
248+
/,
249+
*,
252250
group_guid: Optional[str] = None,
253251
) -> None:
254252
"""
255-
Remove the user from the specified groups.
253+
Remove the user from the specified group.
256254
257255
Parameters
258256
----------
259-
*args : Group
260-
The groups from which the user will be removed.
257+
group : Group
258+
The groups to which the user will be added. Only one of `group=` or `group_guid=` can
259+
be provided.
261260
group_guid : str
262261
The unique identifier (guid) of the group from which the user will be removed.
263262
@@ -283,7 +282,8 @@ def delete(
283282
client.groups.get("GROUP_GUID_1"),
284283
client.groups.get("GROUP_GUID_2"),
285284
]
286-
user.groups.delete(*groups)
285+
for group in groups:
286+
user.groups.delete(group)
287287
288288
# Remove the user from a group by GUID
289289
user.groups.delete(group_guid="GROUP_GUID_HERE")
@@ -293,19 +293,17 @@ def delete(
293293
--------
294294
* https://docs.posit.co/connect/api/#delete-/v1/groups/-group_guid-/members/-user_guid-
295295
"""
296-
if len(args) > 0:
296+
if group is not None:
297297
from .groups import Group
298298

299299
if group_guid:
300-
raise ValueError("Only one of `*args` or `group_guid=` may be be provided.")
301-
302-
for i, group in enumerate(args):
303-
if not isinstance(group, Group):
304-
raise TypeError(
305-
f"`args[{i}]` is not an instance of Group. Received {group}",
306-
)
307-
for group in args:
308-
group.members.delete(user_guid=self._user_guid)
300+
raise ValueError("Only one of `group=` or `group_guid=` may be be provided.")
301+
302+
if not isinstance(group, Group):
303+
raise TypeError(
304+
f"`group=` is not an instance of Group. Received {group}",
305+
)
306+
group.members.delete(user_guid=self._user_guid)
309307
return
310308

311309
if not isinstance(group_guid, str):

tests/posit/connect/test_groups.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ def test_members_add(self):
7373

7474
user = User(self.client._ctx, guid=user_guid)
7575
self.group.members.add(user)
76-
self.group.members.add(user, user)
7776
self.group.members.add(user_guid=user["guid"])
7877

7978
with pytest.raises(TypeError):
@@ -102,7 +101,6 @@ def test_members_delete(self):
102101
user = User(self.client._ctx, guid=user_guid)
103102

104103
self.group.members.delete(user)
105-
self.group.members.delete(user, user)
106104
self.group.members.delete(user_guid=user["guid"])
107105

108106
with pytest.raises(TypeError):

0 commit comments

Comments
 (0)