healthcare/api-client/v1/consent/attribute_definitions.py (306 lines of code) (raw):

# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import argparse import os # [START healthcare_create_resource_attribute_definition] def create_resource_attribute_definition( project_id: str, location: str, dataset_id: str, consent_store_id: str, resource_attribute_definition_id: str, ): """Creates a RESOURCE attribute definition. A RESOURCE attribute is an attribute whose value is determined by the properties of the data or action. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the FHIR store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store's ID # resource_attribute_definition_id = 'requester_identity' # replace with the attribute definition ID consent_store_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) body = { "description": "whether the data is identifiable", "category": "RESOURCE", "allowed_values": ["identifiable", "de-identified"], } request = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .create( parent=consent_store_parent, body=body, attributeDefinitionId=resource_attribute_definition_id, ) ) response = request.execute() print(f"Created RESOURCE attribute definition: {response}") return response # [END healthcare_create_resource_attribute_definition] # [START healthcare_create_request_attribute_definition] def create_request_attribute_definition( project_id: str, location: str, dataset_id: str, consent_store_id: str, request_attribute_definition_id: str, ): """Creates a REQUEST attribute definition. A REQUEST attribute is an attribute whose value is determined by the requester's identity or purpose. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the FHIR store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store's ID # request_attribute_definition_id = 'requester_identity' # replace with the request attribute definition ID consent_store_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) body = { "description": "what groups are consented for access", "category": "REQUEST", "allowed_values": [ "internal-researcher", "external-researcher", "clinical-admin", ], } request = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .create( parent=consent_store_parent, body=body, attributeDefinitionId=request_attribute_definition_id, ) ) response = request.execute() print(f"Created REQUEST attribute definition: {response}") return response # [END healthcare_create_request_attribute_definition] # [START healthcare_get_attribute_definition] def get_attribute_definition( project_id: str, location: str, dataset_id: str, consent_store_id: str, attribute_definition_id: str, ): """Gets the specified attribute definition. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the consent store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store's ID # attribute_definition_id = 'data_identifiable' # replace with the attribute definition ID consent_store_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) attribute_definition_name = "{}/attributeDefinitions/{}".format( consent_store_parent, attribute_definition_id ) request = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .get(name=attribute_definition_name) ) response = request.execute() print(f"Got attribute definition: {attribute_definition_id}") return response # [END healthcare_get_attribute_definition] # [START healthcare_list_attribute_definitions] def list_attribute_definitions( project_id: str, location: str, dataset_id: str, consent_store_id: str ): """Lists the attribute definitions in the given consent store. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the consent store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store ID attribute_definition_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) attribute_definitions = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .list(parent=attribute_definition_parent) .execute() .get("attributeDefinitions", []) ) for attribute_definition in attribute_definitions: print(attribute_definition) return attribute_definitions # [END healthcare_list_attribute_definitions] # [START healthcare_patch_attribute_definition] def patch_attribute_definition( project_id: str, location: str, dataset_id: str, consent_store_id: str, attribute_definition_id: str, description: str, ): """Updates the attribute definition. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the consent store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store's ID # attribute_definition_id = 'requester_identity' # replace with the attribute definition ID # description = 'whether the data is identifiable' # replace with a description of the attribute attribute_definition_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) attribute_definition_name = "{}/attributeDefinitions/{}".format( attribute_definition_parent, attribute_definition_id ) # Updates patch = {"description": description} request = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .patch(name=attribute_definition_name, updateMask="description", body=patch) ) response = request.execute() print( "Patched attribute definition {} with new description: {}".format( attribute_definition_id, description ) ) return response # [END healthcare_patch_attribute_definition] # [START healthcare_delete_attribute_definition] def delete_attribute_definition( project_id: str, location: str, dataset_id: str, consent_store_id: str, attribute_definition_id: str, ): """Deletes the specified attribute definition. See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/consent before running the sample.""" # Imports the Google API Discovery Service. from googleapiclient import discovery api_version = "v1" service_name = "healthcare" # Returns an authorized API client by discovering the Healthcare API # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. client = discovery.build(service_name, api_version) # TODO(developer): Uncomment these lines and replace with your values. # project_id = 'my-project' # replace with your GCP project ID # location = 'us-central1' # replace with the parent dataset's location # dataset_id = 'my-dataset' # replace with the consent store's parent dataset ID # consent_store_id = 'my-consent-store' # replace with the consent store's ID # attribute_definition_id = 'data_identifiable' # replace with the attribute definition ID consent_store_parent = ( "projects/{}/locations/{}/datasets/{}/consentStores/{}".format( project_id, location, dataset_id, consent_store_id ) ) attribute_definition_name = "{}/attributeDefinitions/{}".format( consent_store_parent, attribute_definition_id ) request = ( client.projects() .locations() .datasets() .consentStores() .attributeDefinitions() .delete(name=attribute_definition_name) ) response = request.execute() print(f"Deleted attribute definition: {attribute_definition_id}") return response # [END healthcare_delete_attribute_definition] def parse_command_line_args(): """Parses command line arguments.""" parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter ) parser.add_argument( "--project_id", default=os.environ.get("GOOGLE_CLOUD_PROJECT"), help="GCP cloud project name", ) parser.add_argument("--location", default="us-central1", help="GCP location") parser.add_argument("--dataset_id", default=None, help="ID of dataset") parser.add_argument("--consent_store_id", default=None, help="ID of consent store") parser.add_argument( "--resource_attribute_definition_id", default=None, help="ID of a RESOURCE attribute definition", ) parser.add_argument( "--request_attribute_definition_id", default=None, help="ID of a REQUEST attribute definition", ) parser.add_argument( "--attribute_definition_id", default=None, help="ID of an attribute definition" ) parser.add_argument( "--description", default=None, help="A description of an attribute" ) command = parser.add_subparsers(dest="command") command.add_parser( "create-resource-attribute-definition", help=create_resource_attribute_definition.__doc__, ) command.add_parser( "create-request-attribute-definition", help=create_request_attribute_definition.__doc__, ) command.add_parser( "get-attribute-definition", help=get_attribute_definition.__doc__ ) command.add_parser( "list-attribute-definitions", help=list_attribute_definitions.__doc__ ) command.add_parser( "patch-attribute-definition", help=patch_attribute_definition.__doc__ ) command.add_parser( "delete-attribute-definition", help=delete_attribute_definition.__doc__ ) return parser.parse_args() def run_command(args): """Calls the program using the specified command.""" if args.project_id is None: print( "You must specify a project ID or set the " '"GOOGLE_CLOUD_PROJECT" environment variable.' ) return elif args.command == "create-resource-attribute-definition": create_resource_attribute_definition( args.project_id, args.location, args.dataset_id, args.consent_store_id, args.resource_attribute_definition_id, ) elif args.command == "create-request-attribute-definition": create_request_attribute_definition( args.project_id, args.location, args.dataset_id, args.consent_store_id, args.request_attribute_definition_id, ) elif args.command == "get-attribute-definition": get_attribute_definition( args.project_id, args.location, args.dataset_id, args.consent_store_id, args.attribute_definition_id, ) elif args.command == "list-attribute-definitions": list_attribute_definitions( args.project_id, args.location, args.dataset_id, args.consent_store_id ) elif args.command == "patch-attribute-definition": patch_attribute_definition( args.project_id, args.location, args.dataset_id, args.consent_store_id, args.attribute_definition_id, args.description, ) elif args.command == "delete-attribute-definition": delete_attribute_definition( args.project_id, args.location, args.dataset_id, args.consent_store_id, args.attribute_definition_id, ) def main(): args = parse_command_line_args() run_command(args) if __name__ == "__main__": main()