-import arvados
-
-def get_subproject_uuids(api, root_uuid):
- page = 100
- offset = 0
- uuids = []
- r = api.groups().list(
- filters=[['owner_uuid', '=', '{}'.format(root_uuid)]],
- select=['uuid'],
- limit=page
- ).execute()
- while True:
- for g in r['items']:
- uuids += ([g['uuid']] + get_subproject_uuids(api, g['uuid']))
- if r['items_available'] < offset+page:
- break
- offset += page
- r = api.groups().list(
- filters=[['owner_uuid', '=', '{}'.format(root_uuid)]],
- select=['uuid'],
- limit=page
- ).execute()
- return uuids
-
-def get_cols(api, filters):
- page = 100
- offset = 0
- uuids = []
- r = api.collections().list(filters=filters, select=['uuid', 'properties'], limit=page).execute()
- while True:
- uuids += [c for c in r['items']]
- if r['items_available'] < offset+page:
- break
- offset += page
- r = api.collections().list(filters=filters, select=['uuid', 'properties'], limit=page).execute()
- return uuids
-
-root_uuid = 'zzzzz-j7d0g-ppppppppppppppp'
-responsible_uuid = 'zzzzz-tpzed-xxxxxxxxxxxxxxx'
-
-api = arvados.api()
-for p_uuid in [root_uuid] + get_subproject_uuids(api, root_uuid):
- f = [['properties.responsible_person_uuid', 'exists', False],
- ['owner_uuid', '=', p_uuid]]
- cols = get_cols(api, f)
- print("Found {} collections owned by {}".format(len(cols), p_uuid))
- for c in cols:
- print(" - Updating collection {}".format(c["uuid"]))
- props = c['properties']
- props['responsible_person_uuid'] = responsible_uuid
- api.collections().update(uuid=c['uuid'], body={'properties': props}).execute()