RANGER-3923: updated sample_gds_client.py to use multiple users, groups and zones
diff --git a/ranger-examples/sample-client/src/main/python/sample_gds_client.py b/ranger-examples/sample-client/src/main/python/sample_gds_client.py
index ee6d43a..7ec711e 100644
--- a/ranger-examples/sample-client/src/main/python/sample_gds_client.py
+++ b/ranger-examples/sample-client/src/main/python/sample_gds_client.py
@@ -17,40 +17,117 @@
 # limitations under the License.
 
 
-from apache_ranger.client.ranger_client     import *
-from apache_ranger.client.ranger_gds_client import *
-from apache_ranger.model.ranger_gds         import *
-from apache_ranger.model.ranger_policy      import *
-from apache_ranger.model.ranger_principal   import *
+from apache_ranger.client.ranger_client           import *
+from apache_ranger.client.ranger_gds_client       import *
+from apache_ranger.client.ranger_user_mgmt_client import *
+from apache_ranger.model.ranger_gds               import *
+from apache_ranger.model.ranger_policy            import *
+from apache_ranger.model.ranger_principal         import *
+from apache_ranger.model.ranger_security_zone     import *
+from apache_ranger.model.ranger_user_mgmt         import *
 
 ranger_url  = 'http://localhost:6080'
 ranger_auth = ('admin', 'rangerR0cks!')
 
-ranger = RangerClient(ranger_url, ranger_auth)
-gds    = RangerGdsClient(ranger)
+ranger    = RangerClient(ranger_url, ranger_auth)
+gds       = RangerGdsClient(ranger)
+user_mgmt = RangerUserMgmtClient(ranger)
 
-userJohnDoe = RangerPrincipal({ 'type': PrincipalType.USER, 'name': 'John.Doe' })
+def get_or_create_principal(principal):
+  if isinstance(principal, RangerUser):
+    existing = user_mgmt.get_user(principal.name)
 
+    ret = existing if existing is not None else user_mgmt.create_user(principal)
+  elif isinstance(principal, RangerGroup):
+    existing = user_mgmt.get_group(principal.name)
 
-dataset_1 = RangerDataset({ 'name': 'dataset-1', 'description': 'the first dataset!', 'acl': { 'users': { 'John.Doe': GdsPermission.ADMIN } }, 'termsOfUse': None })
-dataset_2 = RangerDataset({ 'name': 'dataset-2', 'description': 'the second dataset!', 'acl': { 'groups': { 'sales': GdsPermission.ADMIN } }, 'termsOfUse': None })
+    ret = existing if existing is not None else user_mgmt.create_group(principal)
+  else:
+    ret = None
 
-project_1 = RangerProject({ 'name': 'project-1', 'description': 'the first project!', 'acl': { 'users': { 'Diane.Scott': GdsPermission.ADMIN } }, 'termsOfUse': None })
-project_2 = RangerProject({ 'name': 'project-2', 'description': 'the second project!', 'acl': { 'groups': { 'marketing': GdsPermission.ADMIN } }, 'termsOfUse': None })
+  return ret
 
-hive_share_1 = RangerDataShare({ 'name': 'datashare-1', 'description': 'the first datashare!', 'acl': { 'users': { 'Sandy.Williams': GdsPermission.ADMIN } }, 'termsOfUse': None })
-hive_share_1.service            = 'dev_hive'
-hive_share_1.zone               = None
-hive_share_1.conditionExpr      = "HAS_TAG('SCAN_COMPLETE')"
-hive_share_1.defaultAccessTypes = [ '_READ' ]
+def create_or_update_zone(zone):
+  try:
+    existing = ranger.get_security_zone(zone.name)
+  except Exception:
+    existing = None
+
+  if existing is None:
+    ret = ranger.create_security_zone(zone)
+  else:
+    ret = ranger.update_security_zone_by_id(existing.id, zone)
+
+  return ret
+
+usr_john_d   = get_or_create_principal(RangerUser({ 'name': 'John.Doe',       'firstName': 'John',  'emailAddress': 'john.doe@example.com' ,      'password': 'rangerR0cks!' }))
+usr_diane_s  = get_or_create_principal(RangerUser({ 'name': 'Diane.Scott',    'firstName': 'Diane', 'emailAddress': 'diane.scott@example.com' ,   'password': 'rangerR0cks!' }))
+usr_sandy_w  = get_or_create_principal(RangerUser({ 'name': 'Sandy.Williams', 'firstName': 'Sandy', 'emailAddress': 'sandy.williams@example.com', 'password': 'rangerR0cks!' }))
+grp_sales    = get_or_create_principal(RangerGroup({ 'name': 'sales'     }))
+grp_finance  = get_or_create_principal(RangerGroup({ 'name': 'finance'   }))
+grp_shipping = get_or_create_principal(RangerGroup({ 'name': 'shipping' }))
+
+hive_service = 'dev_hive'
+hdfs_service = 'dev_hdfs'
+
+zone_sales    = RangerSecurityZone({ 'name': 'sales',    'description': 'Sales data',    'services': { }, 'adminUsers': [ 'admin' ], 'auditUsers': [ 'admin' ] })
+zone_finance  = RangerSecurityZone({ 'name': 'finance',  'description': 'Finance data',  'services': { }, 'adminUsers': [ 'admin' ], 'auditUsers': [ 'admin' ] })
+zone_shipping = RangerSecurityZone({ 'name': 'shipping', 'description': 'Shipping data', 'services': { }, 'adminUsers': [ 'admin' ], 'auditUsers': [ 'admin' ] })
+
+zone_sales.services[hive_service]    = RangerSecurityZoneService({ 'resources': [ { 'database': [ 'sales'     ] } ] })
+zone_sales.services[hdfs_service]    = RangerSecurityZoneService({ 'resources': [ { 'path':     [ '/sales'    ] } ] })
+zone_finance.services[hive_service]  = RangerSecurityZoneService({ 'resources': [ { 'database': [ 'finance'   ] } ] })
+zone_finance.services[hdfs_service]  = RangerSecurityZoneService({ 'resources': [ { 'path':     [ '/finance'  ] } ] })
+zone_shipping.services[hive_service] = RangerSecurityZoneService({ 'resources': [ { 'database': [ 'shipping'  ] } ] })
+zone_shipping.services[hdfs_service] = RangerSecurityZoneService({ 'resources': [ { 'path':     [ '/shipping' ] } ] })
+
+dataset_1 = RangerDataset({ 'name': 'dataset-1', 'description': 'the first dataset!', 'acl': { 'users': { usr_john_d.name: GdsPermission.ADMIN } } })
+dataset_2 = RangerDataset({ 'name': 'dataset-2', 'description': 'the second dataset!', 'acl': { 'groups': { grp_sales.name: GdsPermission.ADMIN } } })
+dataset_3 = RangerDataset({ 'name': 'dataset-3', 'description': 'the third dataset!', 'acl': { 'users': { usr_john_d.name: GdsPermission.ADMIN } } })
+dataset_4 = RangerDataset({ 'name': 'dataset-4', 'description': 'the fourth dataset!', 'acl': { 'groups': { grp_sales.name: GdsPermission.ADMIN } } })
+
+project_1 = RangerProject({ 'name': 'project-1', 'description': 'the first project!', 'acl': { 'users': { usr_diane_s.name: GdsPermission.ADMIN } } })
+project_2 = RangerProject({ 'name': 'project-2', 'description': 'the second project!', 'acl': { 'groups': { grp_shipping.name: GdsPermission.ADMIN } } })
+
+hive_share_1 = RangerDataShare({ 'name': 'hive-sales-2023',         'service': hive_service, 'zone': zone_sales.name,    'acl': { 'groups': { grp_sales.name:    GdsPermission.ADMIN }}})
+hive_share_2 = RangerDataShare({ 'name': 'hive-finance-2023',       'service': hive_service, 'zone': zone_finance.name,  'acl': { 'groups': { grp_finance.name:  GdsPermission.ADMIN }}})
+hive_share_3 = RangerDataShare({ 'name': 'hive-shipping-2023',      'service': hive_service, 'zone': zone_shipping.name, 'acl': { 'groups': { grp_shipping.name: GdsPermission.ADMIN }}})
+hive_share_4 = RangerDataShare({ 'name': 'hive-new-customers-2023', 'service': hive_service, 'zone': None,               'acl': { 'users':  { usr_sandy_w.name:  GdsPermission.ADMIN }}})
+hive_share_5 = RangerDataShare({ 'name': 'hive-facilities',         'service': hive_service, 'zone': None,               'acl': { 'users':  { usr_diane_s.name:  GdsPermission.ADMIN }}})
+hdfs_share_1 = RangerDataShare({ 'name': 'hdfs-sales-2023',         'service': hdfs_service, 'zone': zone_sales.name,    'acl': { 'groups': { grp_sales.name:    GdsPermission.ADMIN }}})
+hdfs_share_2 = RangerDataShare({ 'name': 'hdfs-finance-2023',       'service': hdfs_service, 'zone': zone_finance.name,  'acl': { 'groups': { grp_finance.name:  GdsPermission.ADMIN }}})
+
+hive_share_1.defaultAccessTypes = [ 'select' ]
 hive_share_1.defaultTagMasks    = [ { 'tagName': 'PII', 'maskInfo': { 'dataMaskType': 'MASK' } } ]
 
-hdfs_share_1 = RangerDataShare({ 'name': 'datashare-2', 'description': 'the second datashare!', 'acl': { 'groups': { 'finance': GdsPermission.ADMIN } }, 'termsOfUse': None })
-hdfs_share_1.service            = 'dev_hdfs'
-hdfs_share_1.zone               = None
-hdfs_share_1.conditionExpr      = "HAS_TAG('SCAN_COMPLETE')"
-hdfs_share_1.defaultAccessTypes = [ '_READ' ]
-hdfs_share_1.defaultTagMasks    = None
+hive_share_2.defaultAccessTypes = [ 'select' ]
+hive_share_2.defaultTagMasks    = [ { 'tagName': 'PII', 'maskInfo': { 'dataMaskType': 'MASK' } } ]
+
+hive_share_3.defaultAccessTypes = [ 'select' ]
+hive_share_3.defaultTagMasks    = [ { 'tagName': 'PII', 'maskInfo': { 'dataMaskType': 'MASK' } } ]
+
+hive_share_4.defaultAccessTypes = [ 'select' ]
+hive_share_4.defaultTagMasks    = [ { 'tagName': 'PII', 'maskInfo': { 'dataMaskType': 'MASK' } } ]
+
+hive_share_5.defaultAccessTypes = [ 'select' ]
+hive_share_5.defaultTagMasks    = [ { 'tagName': 'PII', 'maskInfo': { 'dataMaskType': 'MASK' } } ]
+
+hdfs_share_1.defaultAccessTypes = [ 'read' ]
+
+hdfs_share_2.defaultAccessTypes = [ 'read' ]
+
+
+print(f'Creating zone: name={zone_sales}')
+zone_sales = create_or_update_zone(zone_sales)
+print(f'  created zone: {zone_sales}')
+
+print(f'Creating zone: name={zone_finance.name}')
+zone_finance = create_or_update_zone(zone_finance)
+print(f'  created zone: {zone_finance}')
+
+print(f'Creating zone: name={zone_shipping.name}')
+zone_finance = create_or_update_zone(zone_shipping)
+print(f'  created zone: {zone_shipping}')
 
 print(f'Creating dataset: name={dataset_1.name}')
 dataset_1 = gds.create_dataset(dataset_1)
@@ -60,6 +137,14 @@
 dataset_2 = gds.create_dataset(dataset_2)
 print(f'  created dataset: {dataset_2}')
 
+print(f'Creating dataset: name={dataset_3.name}')
+dataset_3 = gds.create_dataset(dataset_3)
+print(f'  created dataset: {dataset_3}')
+
+print(f'Creating dataset: name={dataset_4.name}')
+dataset_4 = gds.create_dataset(dataset_4)
+print(f'  created dataset: {dataset_4}')
+
 print(f'Creating project: name={project_1.name}')
 project_1 = gds.create_project(project_1)
 print(f'  created project: {project_1}')
@@ -72,31 +157,58 @@
 hive_share_1 = gds.create_data_share(hive_share_1)
 print(f'  created data_share: {hive_share_1}')
 
+print(f'Creating data_share: name={hive_share_2.name}')
+hive_share_2 = gds.create_data_share(hive_share_2)
+print(f'  created data_share: {hive_share_2}')
+
+print(f'Creating data_share: name={hive_share_3.name}')
+hive_share_3 = gds.create_data_share(hive_share_3)
+print(f'  created data_share: {hive_share_3}')
+
+print(f'Creating data_share: name={hive_share_4.name}')
+hive_share_4 = gds.create_data_share(hive_share_4)
+print(f'  created data_share: {hive_share_4}')
+
+print(f'Creating data_share: name={hive_share_5.name}')
+hive_share_5 = gds.create_data_share(hive_share_5)
+print(f'  created data_share: {hive_share_5}')
+
 print(f'Creating data_share: name={hdfs_share_1.name}')
 hdfs_share_1 = gds.create_data_share(hdfs_share_1)
 print(f'  created data_share: {hdfs_share_1}')
 
+print(f'Creating data_share: name={hdfs_share_2.name}')
+hdfs_share_2 = gds.create_data_share(hdfs_share_2)
+print(f'  created data_share: {hdfs_share_2}')
 
-hive_resource_1 = RangerSharedResource({ 'dataShareId': hive_share_1.id, 'name': 'db1.tbl1' })
-hive_resource_1.resource         = { 'database': { 'values': ['db1'] }, 'table': { 'values': ['tbl1'] } }
-hive_resource_1.subResource      = { 'values': [ 'col1', 'col2' ] }
-hive_resource_1.subResourceType  = 'columnn'
-hive_resource_1.conditionExpr    = "HAS_TAG('SCAN_COMPLETE') && !HAS_TAG('PII') && TAGS['DATA_QUALITY'].score > 0.8"
-hive_resource_1.accessTypes      = [ '_READ' ]
-hive_resource_1.rowFilter        = { 'filterExpr': "country = 'US'" }
+
+hive_resource_1 = RangerSharedResource({ 'dataShareId': hive_share_1.id, 'name': 'sales.prospects', 'resource': { 'database': { 'values': ['sales'] },    'table': { 'values': ['prospects'] } }, 'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_2 = RangerSharedResource({ 'dataShareId': hive_share_1.id, 'name': 'sales.orders', 'resource': { 'database': { 'values': ['sales'] },    'table': { 'values': ['orders'] } },    'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_3 = RangerSharedResource({ 'dataShareId': hive_share_2.id, 'name': 'finance.invoices', 'resource': { 'database': { 'values': ['finance'] },  'table': { 'values': ['invoices'] } },  'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_4 = RangerSharedResource({ 'dataShareId': hive_share_2.id, 'name': 'finance.payments', 'resource': { 'database': { 'values': ['finance'] },  'table': { 'values': ['payments'] } },  'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_5 = RangerSharedResource({ 'dataShareId': hive_share_3.id, 'name': 'shipping.shipments', 'resource': { 'database': { 'values': ['shipping'] }, 'table': { 'values': ['shipments'] } },  'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_6 = RangerSharedResource({ 'dataShareId': hive_share_4.id, 'name': 'customers.contact_info', 'resource': { 'database': { 'values': ['customers'] }, 'table': { 'values': ['contact_info'] } },  'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hive_resource_7 = RangerSharedResource({ 'dataShareId': hive_share_5.id, 'name': 'operations.facilities', 'resource': { 'database': { 'values': ['operations'] }, 'table': { 'values': ['facilities'] } },  'subResourceType': 'column', 'subResource': { 'values': [ '*' ]}, 'accessTypes': ['select']})
+hdfs_resource_1 = RangerSharedResource({ 'dataShareId': hdfs_share_1.id, 'name': '/sales/2023/', 'resource': { 'path': { 'values': [ '/sales/2023/' ],   'isRecursive': True } }, 'accessTypes': ['read']})
+hdfs_resource_2 = RangerSharedResource({ 'dataShareId': hdfs_share_2.id, 'name': '/finance/2023/', 'resource': { 'path': { 'values': [ '/finance/2023/' ], 'isRecursive': True } }, 'accessTypes': ['read']})
+
+hive_resource_1.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
 hive_resource_1.subResourceMasks = { 'col1': { 'dataMaskType': 'MASK' } }
-hive_resource_1.profiles         = [ 'GDPR', 'HIPPA' ]
 
-hive_resource_2 = RangerSharedResource({ 'dataShareId': hive_share_1.id, 'name': 'db2.tbl2' })
-hive_resource_2.resource         = { 'database': { 'values': ['db2'] }, 'table': { 'values': ['tbl2'] } }
-hive_resource_2.subResource      = { 'values': [ '*' ] }
-hive_resource_2.subResourceType  = 'column'
-hive_resource_2.accessTypes      = [ '_READ', '_WRITE' ]
-hive_resource_2.profiles         = [ 'GDPR' ]
+hive_resource_2.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
+hive_resource_2.subResourceMasks = { 'amount': { 'dataMaskType': 'MASK' } }
 
-hdfs_resource_1 = RangerSharedResource({ 'dataShareId': hdfs_share_1.id, 'name': '/home/dept/sales'})
-hdfs_resource_1.resource = { 'path': { 'values': [ '/home/dept/sales' ], 'isRecursive': True } }
-hdfs_resource_1.profiles = [ 'GDPR' ]
+hive_resource_3.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
+hive_resource_3.subResourceMasks = { 'amount': { 'dataMaskType': 'MASK' } }
+
+hive_resource_4.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
+hive_resource_4.subResourceMasks = { 'amount': { 'dataMaskType': 'MASK' } }
+
+hive_resource_5.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
+hive_resource_5.subResourceMasks = { 'amount': { 'dataMaskType': 'MASK' } }
+
+hive_resource_6.rowFilter        = { 'filterExpr': "created_time >= '2023-01-01' and created_time < '2024-01-01'" }
+
 
 print(f'Adding shared resource: ')
 hive_resource_1 = gds.add_shared_resource(hive_resource_1)
@@ -107,12 +219,42 @@
 print(f'  created shared resource: {hive_resource_2}')
 
 print(f'Adding shared resource: ')
+hive_resource_3 = gds.add_shared_resource(hive_resource_3)
+print(f'  created shared resource: {hive_resource_3}')
+
+print(f'Adding shared resource: ')
+hive_resource_4 = gds.add_shared_resource(hive_resource_4)
+print(f'  created shared resource: {hive_resource_4}')
+
+print(f'Adding shared resource: ')
+hive_resource_5 = gds.add_shared_resource(hive_resource_5)
+print(f'  created shared resource: {hive_resource_5}')
+
+print(f'Adding shared resource: ')
+hive_resource_6 = gds.add_shared_resource(hive_resource_6)
+print(f'  created shared resource: {hive_resource_6}')
+
+print(f'Adding shared resource: ')
+hive_resource_7 = gds.add_shared_resource(hive_resource_7)
+print(f'  created shared resource: {hive_resource_7}')
+
+print(f'Adding shared resource: ')
 hdfs_resource_1 = gds.add_shared_resource(hdfs_resource_1)
 print(f'  created shared resource: {hdfs_resource_1}')
 
+print(f'Adding shared resource: ')
+hdfs_resource_2 = gds.add_shared_resource(hdfs_resource_2)
+print(f'  created shared resource: {hdfs_resource_2}')
 
-dshid_1 = RangerDataShareInDataset({ 'dataShareId': hive_share_1.id, 'datasetId': dataset_1.id, 'status': GdsShareStatus.REQUESTED, 'validitySchedule': { 'startTime': '2023/01/01', 'endTime': '2023/04/01' } })
-dshid_2 = RangerDataShareInDataset({ 'dataShareId': hdfs_share_1.id, 'datasetId': dataset_2.id, 'status': GdsShareStatus.REQUESTED })
+
+dshid_1 = RangerDataShareInDataset({ 'dataShareId': hive_share_1.id, 'datasetId': dataset_1.id, 'status': GdsShareStatus.REQUESTED, 'validitySchedule': { 'startTime': '2023/01/01', 'endTime': '2024/01/01' } })
+dshid_2 = RangerDataShareInDataset({ 'dataShareId': hive_share_2.id, 'datasetId': dataset_1.id, 'status': GdsShareStatus.REQUESTED })
+dshid_3 = RangerDataShareInDataset({ 'dataShareId': hive_share_2.id, 'datasetId': dataset_2.id, 'status': GdsShareStatus.ACTIVE })
+dshid_4 = RangerDataShareInDataset({ 'dataShareId': hive_share_3.id, 'datasetId': dataset_2.id, 'status': GdsShareStatus.ACTIVE })
+dshid_5 = RangerDataShareInDataset({ 'dataShareId': hive_share_4.id, 'datasetId': dataset_3.id, 'status': GdsShareStatus.ACTIVE })
+dshid_6 = RangerDataShareInDataset({ 'dataShareId': hive_share_5.id, 'datasetId': dataset_4.id, 'status': GdsShareStatus.ACTIVE })
+dshid_7 = RangerDataShareInDataset({ 'dataShareId': hdfs_share_1.id, 'datasetId': dataset_1.id, 'status': GdsShareStatus.ACTIVE })
+dshid_8 = RangerDataShareInDataset({ 'dataShareId': hdfs_share_2.id, 'datasetId': dataset_2.id, 'status': GdsShareStatus.ACTIVE })
 
 print(f'Adding data_share_in_dataset: ')
 dshid_1 = gds.add_data_share_in_dataset(dshid_1)
@@ -122,9 +264,34 @@
 dshid_2 = gds.add_data_share_in_dataset(dshid_2)
 print(f'  created data_share_in_dataset: {dshid_2}')
 
+print(f'Adding data_share_in_dataset: ')
+dshid_3 = gds.add_data_share_in_dataset(dshid_3)
+print(f'  created data_share_in_dataset: {dshid_3}')
+
+print(f'Adding data_share_in_dataset: ')
+dshid_4 = gds.add_data_share_in_dataset(dshid_4)
+print(f'  created data_share_in_dataset: {dshid_4}')
+
+print(f'Adding data_share_in_dataset: ')
+dshid_5 = gds.add_data_share_in_dataset(dshid_5)
+print(f'  created data_share_in_dataset: {dshid_5}')
+
+print(f'Adding data_share_in_dataset: ')
+dshid_6 = gds.add_data_share_in_dataset(dshid_6)
+print(f'  created data_share_in_dataset: {dshid_6}')
+
+print(f'Adding data_share_in_dataset: ')
+dshid_7 = gds.add_data_share_in_dataset(dshid_7)
+print(f'  created data_share_in_dataset: {dshid_7}')
+
 print(f'Updating data_share_in_dataset: id={dshid_1.id}')
-dshid_1.status = GdsShareStatus.GRANTED
-dshid_1 = gds.update_data_share_in_dataset(dshid_1.id, dshid_1)
+dshid = RangerDataShareInDataset()
+dshid.id          = dshid_1.id
+dshid.dataShareId = dshid_1.dataShareId
+dshid.datasetId   = dshid_1.datasetId
+dshid.status = GdsShareStatus.GRANTED
+# dshid_1.status = GdsShareStatus.GRANTED
+dshid_1 = gds.update_data_share_in_dataset(dshid.id, dshid)
 print(f'  updated data_share_in_dataset: {dshid_1}')
 
 print(f'Updating data_share_in_dataset: id={dshid_1.id}')
@@ -134,7 +301,7 @@
 
 print(f'Updating data_share_in_dataset: id={dshid_2.id}')
 dshid_2.status           = GdsShareStatus.GRANTED
-dshid_2.validitySchedule = { 'startTime': '2023/02/01', 'endTime': '2023/03/01' }
+dshid_2.validitySchedule = { 'startTime': '2023/01/01', 'endTime': '2024/01/01' }
 dshid_2 = gds.update_data_share_in_dataset(dshid_2.id, dshid_2)
 print(f'  updated data_share_in_dataset: {dshid_2}')
 
@@ -142,30 +309,44 @@
 policy = gds.add_dataset_policy(dataset_1.id, RangerPolicy({ 'name': dataset_1.name }))
 print(f'  added policy for dataset {dataset_1.name}: {policy}')
 
-policies = gds.get_dataset_policies(dataset_1.id)
-print(f'  policies for dataset {dataset_1.name}: {policies}')
+print(f'Adding policy for dataset {dataset_2.name}: ')
+policy = gds.add_dataset_policy(dataset_2.id, RangerPolicy({ 'name': dataset_2.name }))
+print(f'  added policy for dataset {dataset_2.name}: {policy}')
+
+print(f'Adding policy for dataset {dataset_3.name}: ')
+policy = gds.add_dataset_policy(dataset_3.id, RangerPolicy({ 'name': dataset_3.name }))
+print(f'  added policy for dataset {dataset_3.name}: {policy}')
+
+print(f'Adding policy for dataset {dataset_4.name}: ')
+policy = gds.add_dataset_policy(dataset_4.id, RangerPolicy({ 'name': dataset_4.name }))
+print(f'  added policy for dataset {dataset_4.name}: {policy}')
 
 
 d1_in_p1 = RangerDatasetInProject({ 'datasetId': dataset_1.id, 'projectId': project_1.id, 'status': GdsShareStatus.GRANTED, 'validitySchedule': { 'startTime': '2023/01/01', 'endTime': '2023/04/01' }})
-d1_in_p2 = RangerDatasetInProject({ 'datasetId': dataset_1.id, 'projectId': project_2.id, 'status': GdsShareStatus.GRANTED, 'validitySchedule': { 'startTime': '2023/01/01', 'endTime': '2023/04/01' }})
-d2_in_p2 = RangerDatasetInProject({ 'datasetId': dataset_2.id, 'projectId': project_2.id, 'status': GdsShareStatus.REQUESTED })
+d2_in_p1 = RangerDatasetInProject({ 'datasetId': dataset_2.id, 'projectId': project_1.id, 'status': GdsShareStatus.GRANTED })
+d3_in_p2 = RangerDatasetInProject({ 'datasetId': dataset_3.id, 'projectId': project_2.id, 'status': GdsShareStatus.REQUESTED })
 
 print(f'Creating dataset_in_project: {d1_in_p1.name}')
 d1_in_p1 = gds.add_dataset_in_project(d1_in_p1)
 print(f'  created dataset_in_project: {d1_in_p1}')
 
-print(f'Creating dataset_in_project: {d1_in_p2.name}')
-d1_in_p2 = gds.add_dataset_in_project(d1_in_p2)
-print(f'  created dataset_in_project: {d1_in_p2}')
+print(f'Creating dataset_in_project: {d2_in_p1.name}')
+d2_in_p1 = gds.add_dataset_in_project(d2_in_p1)
+print(f'  created dataset_in_project: {d2_in_p1}')
 
-print(f'Creating dataset_in_project: {d2_in_p2.name}')
-d2_in_p2 = gds.add_dataset_in_project(d2_in_p2)
-print(f'  created dataset_in_project: {d2_in_p2}')
+print(f'Creating dataset_in_project: {d3_in_p2.name}')
+d3_in_p2 = gds.add_dataset_in_project(d3_in_p2)
+print(f'  created dataset_in_project: {d3_in_p2}')
 
-print(f'Updating dataset_in_project: id={d2_in_p2.id}')
-d2_in_p2.status = GdsShareStatus.GRANTED
-d2_in_p2        = gds.update_dataset_in_project(d2_in_p2.id, d2_in_p2)
-print(f'  updated dataset_in_project: {d2_in_p2}')
+print(f'Updating dataset_in_project: id={d2_in_p1.id}')
+d2_in_p1.status = GdsShareStatus.ACTIVE
+d2_in_p1        = gds.update_dataset_in_project(d2_in_p1.id, d2_in_p1)
+print(f'  updated dataset_in_project: {d2_in_p1}')
+
+print(f'Updating dataset_in_project: id={d3_in_p2.id}')
+d3_in_p2.status = GdsShareStatus.ACTIVE
+d3_in_p2        = gds.update_dataset_in_project(d3_in_p2.id, d3_in_p2)
+print(f'  updated dataset_in_project: {d3_in_p2}')
 
 print(f'Adding policy for project {project_1.name}: ')
 policy = gds.add_project_policy(project_1.id, RangerPolicy({ 'name': project_1.name }))
@@ -174,6 +355,12 @@
 policies = gds.get_project_policies(project_1.id)
 print(f'  policies for project {project_1.name}: {policies}')
 
+print(f'Adding policy for project {project_2.name}: ')
+policy = gds.add_project_policy(project_2.id, RangerPolicy({ 'name': project_2.name }))
+print(f'  added policy for project {project_2.name}: {policy}')
+
+
+exit(0)
 
 print(f'Removing dataset_in_project: id={d1_in_p1.id}')
 gds.remove_dataset_in_project(d1_in_p1.id)