44
55import click
66from click import echo
7+ from click import style
78
89from code42cli .bulk import generate_template_cmd_factory
910from code42cli .bulk import run_bulk_process
@@ -89,7 +90,7 @@ def add_user(state, matter_id, username):
8990@sdk_options ()
9091def remove_user (state , matter_id , username ):
9192 """Release a custodian from a legal hold matter."""
92- _remove_user_from_legal_hold (state .sdk , matter_id , username )
93+ _remove_user_from_legal_hold (state , state .sdk , matter_id , username )
9394
9495
9596@legal_hold .command ("list" )
@@ -98,7 +99,7 @@ def remove_user(state, matter_id, username):
9899def _list (state , format = None ):
99100 """Fetch existing legal hold matters."""
100101 formatter = OutputFormatter (format , _MATTER_KEYS_MAP )
101- matters = _get_all_active_matters (state . sdk )
102+ matters = _get_all_active_matters (state )
102103 if matters :
103104 formatter .echo_formatted_list (matters )
104105
@@ -120,14 +121,21 @@ def _list(state, format=None):
120121def show (state , matter_id , include_inactive = False , include_policy = False ):
121122 """Display details of a given legal hold matter."""
122123 matter = _check_matter_is_accessible (state .sdk , matter_id )
123- matter ["creator_username" ] = matter ["creator" ]["username" ]
124+
125+ if state .profile .api_client_auth == "True" :
126+ try :
127+ matter ["creator_username" ] = matter ["creator" ]["user" ]["email" ]
128+ except KeyError :
129+ pass
130+ else :
131+ matter ["creator_username" ] = matter ["creator" ]["username" ]
124132 matter = json .loads (matter .text )
125133
126134 # if `active` is None then all matters (whether active or inactive) are returned. True returns
127135 # only those that are active.
128136 active = None if include_inactive else True
129137 memberships = _get_legal_hold_memberships_for_matter (
130- state .sdk , matter_id , active = active
138+ state , state .sdk , matter_id , active = active
131139 )
132140 active_usernames = [
133141 member ["user" ]["username" ] for member in memberships if member ["active" ]
@@ -161,6 +169,15 @@ def show(state, matter_id, include_inactive=False, include_policy=False):
161169@sdk_options ()
162170def search_events (state , matter_id , event_type , begin , end , format ):
163171 """Tools for getting legal hold event data."""
172+ if state .profile .api_client_auth == "True" :
173+ echo (
174+ style (
175+ "WARNING: This method is unavailable with API Client Authentication." ,
176+ fg = "red" ,
177+ ),
178+ err = True ,
179+ )
180+
164181 formatter = OutputFormatter (format , _EVENT_KEYS_MAP )
165182 events = _get_all_events (state .sdk , matter_id , begin , end )
166183 if event_type :
@@ -214,7 +231,7 @@ def remove(state, csv_rows):
214231 sdk = state .sdk
215232
216233 def handle_row (matter_id , username ):
217- _remove_user_from_legal_hold (sdk , matter_id , username )
234+ _remove_user_from_legal_hold (state , sdk , matter_id , username )
218235
219236 run_bulk_process (
220237 handle_row , csv_rows , progress_label = "Removing users from legal hold:"
@@ -227,11 +244,20 @@ def _add_user_to_legal_hold(sdk, matter_id, username):
227244 sdk .legalhold .add_to_matter (user_id , matter_id )
228245
229246
230- def _remove_user_from_legal_hold (sdk , matter_id , username ):
247+ def _remove_user_from_legal_hold (state , sdk , matter_id , username ):
231248 _check_matter_is_accessible (sdk , matter_id )
232- membership_id = _get_legal_hold_membership_id_for_user_and_matter (
233- sdk , username , matter_id
249+
250+ user_id = get_user_id (sdk , username )
251+ memberships = _get_legal_hold_memberships_for_matter (
252+ state , sdk , matter_id , active = True
234253 )
254+ membership_id = None
255+ for member in memberships :
256+ if member ["user" ]["userUid" ] == user_id :
257+ membership_id = member ["legalHoldMembershipUid" ]
258+ if not membership_id :
259+ raise UserNotInLegalHoldError (username , matter_id )
260+
235261 sdk .legalhold .remove_from_matter (membership_id )
236262
237263
@@ -241,37 +267,41 @@ def _get_and_print_preservation_policy(sdk, policy_uid):
241267 echo (pformat (json .loads (preservation_policy .text )))
242268
243269
244- def _get_legal_hold_membership_id_for_user_and_matter (sdk , username , matter_id ):
245- user_id = get_user_id (sdk , username )
246- memberships = _get_legal_hold_memberships_for_matter (sdk , matter_id , active = True )
247- for member in memberships :
248- if member ["user" ]["userUid" ] == user_id :
249- return member ["legalHoldMembershipUid" ]
250- raise UserNotInLegalHoldError (username , matter_id )
251-
252-
253- def _get_legal_hold_memberships_for_matter (sdk , matter_id , active = True ):
270+ def _get_legal_hold_memberships_for_matter (state , sdk , matter_id , active = True ):
254271 memberships_generator = sdk .legalhold .get_all_matter_custodians (
255- legal_hold_uid = matter_id , active = active
272+ matter_id , active = active
256273 )
257- memberships = [
258- member
259- for page in memberships_generator
260- for member in page ["legalHoldMemberships" ]
261- ]
274+ if state .profile .api_client_auth == "True" :
275+ memberships = [member for page in memberships_generator for member in page ]
276+ else :
277+ memberships = [
278+ member
279+ for page in memberships_generator
280+ for member in page ["legalHoldMemberships" ]
281+ ]
262282 return memberships
263283
264284
265- def _get_all_active_matters (sdk ):
266- matters_generator = sdk .legalhold .get_all_matters ()
267- matters = [
268- matter
269- for page in matters_generator
270- for matter in page ["legalHolds" ]
271- if matter ["active" ]
272- ]
273- for matter in matters :
274- matter ["creator_username" ] = matter ["creator" ]["username" ]
285+ def _get_all_active_matters (state ):
286+ matters_generator = state .sdk .legalhold .get_all_matters ()
287+ if state .profile .api_client_auth == "True" :
288+ matters = [
289+ matter for page in matters_generator for matter in page if matter ["active" ]
290+ ]
291+ for matter in matters :
292+ try :
293+ matter ["creator_username" ] = matter ["creator" ]["user" ]["email" ]
294+ except KeyError :
295+ pass
296+ else :
297+ matters = [
298+ matter
299+ for page in matters_generator
300+ for matter in page ["legalHolds" ]
301+ if matter ["active" ]
302+ ]
303+ for matter in matters :
304+ matter ["creator_username" ] = matter ["creator" ]["username" ]
275305 return matters
276306
277307
0 commit comments