diff --git a/workos/event_objects/directory_group.py b/workos/event_objects/directory_group.py index 16720aac..90936b5c 100644 --- a/workos/event_objects/directory_group.py +++ b/workos/event_objects/directory_group.py @@ -1,5 +1,6 @@ from typing import Literal, TypedDict from workos.utils.types import JsonDict +from directory_user import DirectoryUserEventData, WorkOSDirectoryUserEventData class DirectoryGroupEventData(TypedDict): @@ -145,3 +146,112 @@ def to_dict(self) -> DirectoryGroupUpdatedEvent: def __str__(self): return f"{self.__class__.__name__} {self.to_dict()}" + + +class DirectoryGroupMembershipEventData(TypedDict): + directory_id: str + user: DirectoryUserEventData + group: DirectoryGroupEventData + + +class DirectoryGroupMembershipEventData: + directory_id: str + user: DirectoryUserEventData + group: DirectoryGroupEventData + + @classmethod + def construct_from_response(cls, response: dict): + instance = cls() + for k, v in response.items(): + if k == "user": + setattr( + instance, + k, + WorkOSDirectoryUserEventData.construct_from_response(v), + ) + elif k == "group": + setattr( + instance, + k, + WorkOSDirectoryGroupEventData.construct_from_response(v), + ) + else: + setattr(instance, k, v) + + return instance + + def to_dict(self) -> DirectoryGroupMembershipEventData: + return self.__dict__ + + def __str__(self): + return f"{self.__class__.__name__} {self.to_dict()}" + + +class DirectoryGroupUserAddedEvent(TypedDict): + event: Literal["dsync.group.user_added"] + id: str + created_at: str + data: DirectoryGroupMembershipEventData + + +class WorkOSDirectoryGroupUserAddedEvent: + event: Literal["dsync.group.user_added"] + id: str + created_at: str + data: DirectoryGroupMembershipEventData + + @classmethod + def construct_from_response(cls, response: dict): + instance = cls() + for k, v in response.items(): + if k == "data": + setattr( + instance, + k, + DirectoryGroupMembershipEventData.construct_from_response(v), + ) + else: + setattr(instance, k, v) + + return instance + + def to_dict(self) -> DirectoryGroupUserAddedEvent: + return self.__dict__ + + def __str__(self): + return f"{self.__class__.__name__} {self.to_dict()}" + + +class DirectoryGroupUserRemovedEvent(TypedDict): + event: Literal["dsync.group.user_removed"] + id: str + created_at: str + data: DirectoryGroupMembershipEventData + + +class WorkOSDirectoryGroupUserRemovedEvent: + event: Literal["dsync.group.user_removed"] + id: str + created_at: str + data: DirectoryGroupMembershipEventData + + @classmethod + def construct_from_response(cls, response: dict): + instance = cls() + for k, v in response.items(): + if k == "data": + setattr( + instance, + k, + DirectoryGroupMembershipEventData.construct_from_response(v), + ) + else: + setattr(instance, k, v) + + return instance + + def to_dict(self) -> DirectoryGroupUserRemovedEvent: + return self.__dict__ + + def __str__(self): + return f"{self.__class__.__name__} {self.to_dict()}"