@@ -25,15 +25,15 @@ def get_client(service_account_json, api_key):
25
25
"""Returns an authorized API client by discovering the Healthcare API and
26
26
creating a service object using the service account credentials JSON."""
27
27
api_scopes = ['https://www.googleapis.com/auth/cloud-platform' ]
28
- api_version = 'v1alpha2 '
28
+ api_version = 'v1beta1 '
29
29
discovery_api = 'https://healthcare.googleapis.com/$discovery/rest'
30
30
service_name = 'healthcare'
31
31
32
32
credentials = service_account .Credentials .from_service_account_file (
33
33
service_account_json )
34
34
scoped_credentials = credentials .with_scopes (api_scopes )
35
35
36
- discovery_url = '{}?labels=CHC_ALPHA &version={}&key={}' .format (
36
+ discovery_url = '{}?labels=CHC_BETA &version={}&key={}' .format (
37
37
discovery_api , api_version , api_key )
38
38
39
39
return discovery .build (
@@ -237,6 +237,80 @@ def deidentify_dataset(
237
237
# [END healthcare_deidentify_dataset]
238
238
239
239
240
+ # [START healthcare_dataset_get_iam_policy]
241
+ def get_dataset_iam_policy (
242
+ service_account_json ,
243
+ api_key ,
244
+ project_id ,
245
+ cloud_region ,
246
+ dataset_id ):
247
+ """Gets the IAM policy for the specified dataset."""
248
+ client = get_client (service_account_json , api_key )
249
+ dataset_name = 'projects/{}/locations/{}/datasets/{}' .format (
250
+ project_id , cloud_region , dataset_id )
251
+
252
+ request = client .projects ().locations ().datasets ().getIamPolicy (
253
+ resource = dataset_name )
254
+ response = request .execute ()
255
+
256
+ print ('etag: {}' .format (response .get ('name' )))
257
+ return response
258
+ # [END healthcare_dataset_get_iam_policy]
259
+
260
+
261
+ # [START healthcare_dataset_set_iam_policy]
262
+ def set_dataset_iam_policy (
263
+ service_account_json ,
264
+ api_key ,
265
+ project_id ,
266
+ cloud_region ,
267
+ dataset_id ,
268
+ member ,
269
+ role ,
270
+ etag = None ):
271
+ """Sets the IAM policy for the specified dataset.
272
+
273
+ A single member will be assigned a single role. A member can be any of:
274
+
275
+ - allUsers, that is, anyone
276
+ - allAuthenticatedUsers, anyone authenticated with a Google account
277
+ - user:email, as in 'user:[email protected] '
278
+ - group:email, as in 'group:[email protected] '
279
+ - domain:domainname, as in 'domain:example.com'
280
+ - serviceAccount:email,
281
+ as in 'serviceAccount:[email protected] '
282
+
283
+ A role can be any IAM role, such as 'roles/viewer', 'roles/owner',
284
+ or 'roles/editor'
285
+ """
286
+ client = get_client (service_account_json , api_key )
287
+ dataset_name = 'projects/{}/locations/{}/datasets/{}' .format (
288
+ project_id , cloud_region , dataset_id )
289
+
290
+ policy = {
291
+ "bindings" : [
292
+ {
293
+ "role" : role ,
294
+ "members" : [
295
+ member
296
+ ]
297
+ }
298
+ ]
299
+ }
300
+
301
+ if etag is not None :
302
+ policy ['etag' ] = etag
303
+
304
+ request = client .projects ().locations ().datasets ().setIamPolicy (
305
+ resource = dataset_name , body = {'policy' : policy })
306
+ response = request .execute ()
307
+
308
+ print ('etag: {}' .format (response .get ('name' )))
309
+ print ('bindings: {}' .format (response .get ('bindings' )))
310
+ return response
311
+ # [END healthcare_dataset_set_iam_policy]
312
+
313
+
240
314
def parse_command_line_args ():
241
315
"""Parses command line arguments."""
242
316
@@ -286,13 +360,25 @@ def parse_command_line_args():
286
360
help = 'The data to keeplist, for example "PatientID" '
287
361
'or "StudyInstanceUID"' )
288
362
363
+ parser .add_argument (
364
+ '--member' ,
365
+ default = None ,
366
+ help = 'Member to add to IAM policy (e.g. "domain:example.com")' )
367
+
368
+ parser .add_argument (
369
+ '--role' ,
370
+ default = None ,
371
+ help = 'IAM Role to give to member (e.g. "roles/viewer")' )
372
+
289
373
command = parser .add_subparsers (dest = 'command' )
290
374
291
375
command .add_parser ('create-dataset' , help = create_dataset .__doc__ )
292
376
command .add_parser ('delete-dataset' , help = delete_dataset .__doc__ )
293
377
command .add_parser ('get-dataset' , help = get_dataset .__doc__ )
294
378
command .add_parser ('list-datasets' , help = list_datasets .__doc__ )
295
379
command .add_parser ('patch-dataset' , help = patch_dataset .__doc__ )
380
+ command .add_parser ('get_iam_policy' , help = get_dataset_iam_policy .__doc__ )
381
+ command .add_parser ('set_iam_policy' , help = set_dataset_iam_policy .__doc__ )
296
382
297
383
command .add_parser ('deidentify-dataset' , help = deidentify_dataset .__doc__ )
298
384
@@ -356,6 +442,24 @@ def run_command(args):
356
442
args .destination_dataset_id ,
357
443
args .keeplist_tags )
358
444
445
+ elif args .command == 'get_iam_policy' :
446
+ get_dataset_iam_policy (
447
+ args .service_account_json ,
448
+ args .api_key ,
449
+ args .project_id ,
450
+ args .cloud_region ,
451
+ args .dataset_id )
452
+
453
+ elif args .command == 'set_iam_policy' :
454
+ set_dataset_iam_policy (
455
+ args .service_account_json ,
456
+ args .api_key ,
457
+ args .project_id ,
458
+ args .cloud_region ,
459
+ args .dataset_id ,
460
+ args .member ,
461
+ args .role )
462
+
359
463
360
464
def main ():
361
465
args = parse_command_line_args ()
0 commit comments