Skip to content

Commit

Permalink
feat: Add User id endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
fundthmcalculus committed Sep 23, 2024
1 parent 1c15da4 commit 557156e
Show file tree
Hide file tree
Showing 7 changed files with 115 additions and 7 deletions.
14 changes: 10 additions & 4 deletions src/pyconnectwise/clients/change_request_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

from pyconnectwise.clients.connectwise_client import ConnectWiseClient
from pyconnectwise.config import Config
from pyconnectwise.endpoints.change_request.UsersEndpoint import UsersEndpoint

if typing.TYPE_CHECKING:
from pyconnectwise.endpoints.change_request.ChangeRequestEndpoint import ChangeRequestEndpoint
from pyconnectwise.endpoints.change_request.ChangeRequestsEndpoint import ChangeRequestsEndpoint
from pyconnectwise.endpoints.change_request.ChangeTypeEndpoint import ChangeTypeEndpoint


Expand Down Expand Up @@ -63,10 +64,10 @@ def __init__(

# Initializing endpoints
@property
def change_request(self) -> "ChangeRequestEndpoint":
from pyconnectwise.endpoints.change_request.ChangeRequestEndpoint import ChangeRequestEndpoint
def change_request(self) -> "ChangeRequestsEndpoint":
from pyconnectwise.endpoints.change_request.ChangeRequestsEndpoint import ChangeRequestsEndpoint

return ChangeRequestEndpoint(self)
return ChangeRequestsEndpoint(self)

@property
def change_type(self) -> "ChangeTypeEndpoint":
Expand Down Expand Up @@ -104,6 +105,11 @@ def audit_log(self):
# Yes, this has a different route than the plural version
raise NotImplementedError("audit log singular endpoint not implemented yet.")

@property
def users(self) -> "UsersEndpoint":
from pyconnectwise.endpoints.change_request.UsersEndpoint import UsersEndpoint
return UsersEndpoint(self)

def login(self) -> None:
"""
Logs in to the ConnectWise Change Approval API and retrieves the new cookie
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from pyconnectwise.clients.connectwise_client import ConnectWiseClient


class ChangeRequestEndpoint(
class ChangeRequestsEndpoint(
ConnectWiseEndpoint,
IGettable[list[ChangeRequestMsg], ConnectWiseManageRequestParams],
IPostable[ChangeRequestMsg, ConnectWiseManageRequestParams],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
class ChangeTypeEndpoint(
ConnectWiseEndpoint,
IGettable[list[ChangeRequestMsg], ConnectWiseManageRequestParams],
IPostable[ChangeRequestMsg, ConnectWiseManageRequestParams],
IPaginateable[ChangeRequestMsg, ConnectWiseManageRequestParams],
):
def __init__(self, client: "ConnectWiseClient", parent_endpoint: ConnectWiseEndpoint = None) -> None:
ConnectWiseEndpoint.__init__(self, client, "change_type", parent_endpoint=parent_endpoint)
Expand Down
31 changes: 31 additions & 0 deletions src/pyconnectwise/endpoints/change_request/UserIdEndpoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from typing import TYPE_CHECKING

from pyconnectwise.endpoints.base.connectwise_endpoint import ConnectWiseEndpoint
from pyconnectwise.interfaces import IGettable
from pyconnectwise.models.change_request import ChangeRequestMsg, UserIdMsg, UserIdObject
from pyconnectwise.types import JSON, ConnectWiseManageRequestParams

if TYPE_CHECKING:
from pyconnectwise.clients.connectwise_client import ConnectWiseClient


class UserIdEndpoint(
ConnectWiseEndpoint,
IGettable[list[ChangeRequestMsg], ConnectWiseManageRequestParams],
):
def __init__(self, client: "ConnectWiseClient", parent_endpoint: ConnectWiseEndpoint = None) -> None:
ConnectWiseEndpoint.__init__(self, client, "{id}", parent_endpoint=parent_endpoint)
IGettable.__init__(self, list[ChangeRequestMsg])

def get(self, data: JSON | None = None, params: ConnectWiseManageRequestParams | None = None) -> UserIdMsg:
"""
Performs a GET request against the /api/change_requests endpoint.
Parameters:
data (dict[str, Any]): The data to send in the request body.
params (dict[str, int | str]): The parameters to send in the request query string.
Returns:
list[ChangeRequestMsg]: The parsed response data.
"""
obj = self._parse_one(UserIdObject, super()._make_request("GET", data=data, params=params).json())
return obj.msg
42 changes: 42 additions & 0 deletions src/pyconnectwise/endpoints/change_request/UsersEndpoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from typing import TYPE_CHECKING

from pyconnectwise.endpoints.base.connectwise_endpoint import ConnectWiseEndpoint
from pyconnectwise.endpoints.change_request.UserIdEndpoint import UserIdEndpoint
from pyconnectwise.interfaces import IGettable
from pyconnectwise.models.change_request import ChangeRequestMsg, ChangeTypeData, UserIdMsg
from pyconnectwise.types import JSON, ConnectWiseManageRequestParams

if TYPE_CHECKING:
from pyconnectwise.clients.connectwise_client import ConnectWiseClient


class UsersEndpoint(
ConnectWiseEndpoint,
IGettable[list[ChangeRequestMsg], ConnectWiseManageRequestParams],
):
def __init__(self, client: "ConnectWiseClient", parent_endpoint: ConnectWiseEndpoint = None) -> None:
ConnectWiseEndpoint.__init__(self, client, "users", parent_endpoint=parent_endpoint)
IGettable.__init__(self, list[ChangeTypeData])

# TODO - Handle paginated?

# TODO - Figure out if there are other endpoints!
# TODO - Handle the fact that the TLD is different!

def id(self, _id: str) -> UserIdEndpoint:
child = UserIdEndpoint(self.client, parent_endpoint=self)
child._id = _id
return child

def get(self, data: JSON | None = None, params: ConnectWiseManageRequestParams | None = None) -> list[UserIdMsg]:
"""
Performs a GET request against the /api/change_requests endpoint.
Parameters:
data (dict[str, Any]): The data to send in the request body.
params (dict[str, int | str]): The parameters to send in the request query string.
Returns:
list[ChangeTypeData]: The parsed response data.
"""
# TODO - Throw out the msg total, current information
return self._parse_many(UserIdMsg, super()._make_request("GET", data=data, params=params).json())
22 changes: 22 additions & 0 deletions src/pyconnectwise/models/change_request/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,3 +245,25 @@ class ChangeTypeMsg(ConnectWiseModel):
class ChangeTypeObject(ConnectWiseModel):
status: Annotated[str | None, Field(alias="status")] = None
msg: Annotated[ChangeTypeMsg | None, Field(alias="msg")] = None


class UserIdMsg(ConnectWiseModel):
id: Annotated[str | None, Field(alias="_id")] = None
user_name: Annotated[str | None, Field(alias="userName")] = None
company: Annotated[str | None, Field(alias="company")] = None
domain: Annotated[str | None, Field(alias="domain")] = None
role: Annotated[str | None, Field(alias="role")] = None
password: Annotated[str | None, Field(alias="password")] = None
status: Annotated[str | None, Field(alias="status")] = None
wizard_complete: Annotated[bool | None, Field(alias="wizardComplete")] = None
direct_ticket_url: Annotated[bool | None, Field(alias="directTicketUrl")] = None
partner_id: Annotated[str | None, Field(alias="partnerId")] = None
api_key: Annotated[str | None, Field(alias="apiKey")] = None
created: Annotated[int | None, Field(alias="created")] = None
updated: Annotated[int | None, Field(alias="updated")] = None
is_agree: Annotated[bool | None, Field(alias="isAgree")] = None


class UserIdObject(ConnectWiseModel):
status: Annotated[str | None, Field(alias="status")] = None
msg: Annotated[UserIdMsg | None, Field(alias="msg")] = None
9 changes: 9 additions & 0 deletions tests/clients/test_change_approvals.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ def test_get_change_approval():
assert change_approval.id == change_request_id


def test_get_user():
# Testing with real data. :D
test_id = "642bfee39d2d780477bdc662"
client = change_approval_client_init()
client.login()
user_info = client.users.id(test_id).get()
assert user_info.id == test_id


def test_login():
client = change_approval_client_init()
client.login()
Expand Down

0 comments on commit 557156e

Please sign in to comment.