11import workos
22from workos .exceptions import ConfigurationException
3- from workos .utils .request import RequestHelper , REQUEST_METHOD_POST
3+ from workos .resources .event import WorkOSEvent
4+ from workos .utils .request import RequestHelper , REQUEST_METHOD_GET , REQUEST_METHOD_POST
45from workos .utils .validation import AUDIT_TRAIL_MODULE , validate_settings
56
67EVENTS_PATH = "events"
78METADATA_LIMIT = 50
9+ DEFAULT_EVENT_LIMIT = 10
810
911
1012class AuditTrail (object ):
@@ -51,7 +53,7 @@ def create_event(self, event, idempotency_key=None):
5153 dict: Response from WorkOS
5254 """
5355 if len (event .get ("metadata" , {})) > METADATA_LIMIT :
54- raise Exception (
56+ raise ValueError (
5557 "Number of metadata keys exceeds {}." .format (METADATA_LIMIT )
5658 )
5759
@@ -66,3 +68,80 @@ def create_event(self, event, idempotency_key=None):
6668 headers = headers ,
6769 token = workos .api_key ,
6870 )
71+
72+ def get_events (
73+ self ,
74+ before = None ,
75+ after = None ,
76+ limit = DEFAULT_EVENT_LIMIT ,
77+ group = None ,
78+ action = None ,
79+ action_type = None ,
80+ actor_name = None ,
81+ actor_id = None ,
82+ target_name = None ,
83+ target_id = None ,
84+ occurred_at = None ,
85+ occurred_at_gt = None ,
86+ occurred_at_gte = None ,
87+ occurred_at_lt = None ,
88+ occurred_at_lte = None ,
89+ search = None ,
90+ ):
91+ if before and after :
92+ raise ValueError ("Specify either before or after" )
93+
94+ params = {
95+ "before" : before ,
96+ "after" : after ,
97+ "limit" : limit ,
98+ }
99+
100+ if group :
101+ params ["group" ] = list (group )
102+
103+ if action :
104+ params ["action" ] = list (action )
105+
106+ if action_type :
107+ params ["action_type" ] = list (action_type )
108+
109+ if actor_name :
110+ params ["actor_name" ] = list (actor_name )
111+
112+ if actor_id :
113+ params ["actor_id" ] = list (actor_id )
114+
115+ if target_name :
116+ params ["target_name" ] = list (target_name )
117+
118+ if target_id :
119+ params ["target_id" ] = list (target_id )
120+
121+ if occurred_at :
122+ params ["occurred_at" ] = occurred_at
123+ else :
124+ if occurred_at_gte :
125+ params ["occurred_at_gte" ] = occurred_at_gte
126+ elif occurred_at_gt :
127+ params ["occurred_at_gt" ] = occurred_at_gt
128+
129+ if occurred_at_lte :
130+ params ["occurred_at_lte" ] = occurred_at_lte
131+ elif occurred_at_lt :
132+ params ["occurred_at_lt" ] = occurred_at_lt
133+
134+ if search :
135+ params ["search" ] = search
136+
137+ response = self .request_helper .request (
138+ EVENTS_PATH , method = REQUEST_METHOD_GET , params = params , token = workos .api_key ,
139+ )
140+
141+ events = [
142+ WorkOSEvent .construct_from_response (data ) for data in response ["data" ]
143+ ]
144+ before = response ["listMetadata" ]["before" ]
145+ after = response ["listMetadata" ]["after" ]
146+
147+ return (events , before , after )
0 commit comments