Skip to content

Commit e8954d6

Browse files
authored
refactor: consistent update method signature (#122)
1 parent 2f593cc commit e8954d6

File tree

3 files changed

+72
-34
lines changed

3 files changed

+72
-34
lines changed

.coveragerc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,10 @@
1+
# This file contains the configuration settings for the coverage report generated.
2+
13
[report]
2-
fail_under = 80
4+
# exclude '...' (ellipsis literal). This option uses regex, so an escaped literal is required.
5+
# exclude 'raise NotImplementedError()'.
6+
exclude_also =
7+
\.\.\.
8+
raise NotImplementedError()
9+
10+
fail_under = 80

src/posit/connect/content.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,18 @@ def update(
249249
...
250250

251251
@overload
252-
def update(self, *args, **kwargs) -> None: ...
252+
def update(self, *args, **kwargs) -> None:
253+
"""
254+
Update the content item.
255+
256+
Args:
257+
*args
258+
**kwargs
259+
260+
Returns:
261+
None
262+
"""
263+
...
253264

254265
def update(self, *args, **kwargs) -> None:
255266
"""

src/posit/connect/users.py

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from __future__ import annotations
2-
from typing import List, Optional
2+
from typing import List, overload
33

44

55
import requests
@@ -91,41 +91,60 @@ def unlock(self):
9191
self.session.post(url, json=body)
9292
super().update(locked=False)
9393

94-
def _update(self, body):
95-
if len(body) == 0:
96-
return
94+
@overload
95+
def update(
96+
self,
97+
email: str = ...,
98+
username: str = ...,
99+
first_name: str = ...,
100+
last_name: str = ...,
101+
user_role: str = ...,
102+
) -> None:
103+
"""
104+
Update the user.
105+
106+
Args:
107+
email (str): The email address for the user.
108+
username (str): The username for the user.
109+
first_name (str): The first name for the user.
110+
last_name (str): The last name for the user.
111+
user_role (str): The role for the user.
112+
113+
Returns:
114+
None
115+
"""
116+
...
117+
118+
@overload
119+
def update(self, *args, **kwargs) -> None:
120+
"""
121+
Update the user.
122+
123+
Args:
124+
*args
125+
**kwargs
126+
127+
Returns:
128+
None
129+
"""
130+
...
131+
132+
def update(self, *args, **kwargs) -> None:
133+
"""
134+
Update the user.
135+
136+
Args:
137+
*args
138+
**kwargs
139+
140+
Returns:
141+
None
142+
"""
143+
body = dict(*args, **kwargs)
97144
url = urls.append_path(self.config.url, f"v1/users/{self.guid}")
98145
response = self.session.put(url, json=body)
99146
super().update(**response.json())
100147

101-
def update( # type: ignore
102-
self,
103-
# Not all properties are settable, so we enumerate them here
104-
# (also for type-hinting purposes)
105-
email: Optional[str] = None,
106-
username: Optional[str] = None,
107-
first_name: Optional[str] = None,
108-
last_name: Optional[str] = None,
109-
user_role: Optional[str] = None,
110-
# TODO(#100): in the API, this goes via POST /v1/users/{guid}/lock
111-
# accept it here and make that request? Or add a .lock() method?
112-
# locked: Optional[bool] = None,
113-
) -> None:
114-
kwargs = {}
115-
if email is not None:
116-
kwargs["email"] = email
117-
if username is not None:
118-
kwargs["username"] = username
119-
if first_name is not None:
120-
kwargs["first_name"] = first_name
121-
if last_name is not None:
122-
kwargs["last_name"] = last_name
123-
if user_role is not None:
124-
kwargs["user_role"] = user_role
125-
# if locked is not None:
126-
# kwargs["locked"] = locked
127-
self._update(kwargs)
128-
129148

130149
class Users(Resources[User]):
131150
def __init__(self, config: Config, session: requests.Session) -> None:

0 commit comments

Comments
 (0)