4
4
5
5
import click
6
6
from click import echo
7
+ from click import style
7
8
8
9
from code42cli .bulk import generate_template_cmd_factory
9
10
from code42cli .bulk import run_bulk_process
@@ -89,7 +90,7 @@ def add_user(state, matter_id, username):
89
90
@sdk_options ()
90
91
def remove_user (state , matter_id , username ):
91
92
"""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 )
93
94
94
95
95
96
@legal_hold .command ("list" )
@@ -98,7 +99,7 @@ def remove_user(state, matter_id, username):
98
99
def _list (state , format = None ):
99
100
"""Fetch existing legal hold matters."""
100
101
formatter = OutputFormatter (format , _MATTER_KEYS_MAP )
101
- matters = _get_all_active_matters (state . sdk )
102
+ matters = _get_all_active_matters (state )
102
103
if matters :
103
104
formatter .echo_formatted_list (matters )
104
105
@@ -120,14 +121,21 @@ def _list(state, format=None):
120
121
def show (state , matter_id , include_inactive = False , include_policy = False ):
121
122
"""Display details of a given legal hold matter."""
122
123
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" ]
124
132
matter = json .loads (matter .text )
125
133
126
134
# if `active` is None then all matters (whether active or inactive) are returned. True returns
127
135
# only those that are active.
128
136
active = None if include_inactive else True
129
137
memberships = _get_legal_hold_memberships_for_matter (
130
- state .sdk , matter_id , active = active
138
+ state , state .sdk , matter_id , active = active
131
139
)
132
140
active_usernames = [
133
141
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):
161
169
@sdk_options ()
162
170
def search_events (state , matter_id , event_type , begin , end , format ):
163
171
"""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
+
164
181
formatter = OutputFormatter (format , _EVENT_KEYS_MAP )
165
182
events = _get_all_events (state .sdk , matter_id , begin , end )
166
183
if event_type :
@@ -214,7 +231,7 @@ def remove(state, csv_rows):
214
231
sdk = state .sdk
215
232
216
233
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 )
218
235
219
236
run_bulk_process (
220
237
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):
227
244
sdk .legalhold .add_to_matter (user_id , matter_id )
228
245
229
246
230
- def _remove_user_from_legal_hold (sdk , matter_id , username ):
247
+ def _remove_user_from_legal_hold (state , sdk , matter_id , username ):
231
248
_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
234
253
)
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
+
235
261
sdk .legalhold .remove_from_matter (membership_id )
236
262
237
263
@@ -241,37 +267,41 @@ def _get_and_print_preservation_policy(sdk, policy_uid):
241
267
echo (pformat (json .loads (preservation_policy .text )))
242
268
243
269
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 ):
254
271
memberships_generator = sdk .legalhold .get_all_matter_custodians (
255
- legal_hold_uid = matter_id , active = active
272
+ matter_id , active = active
256
273
)
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
+ ]
262
282
return memberships
263
283
264
284
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" ]
275
305
return matters
276
306
277
307
0 commit comments