Project

General

Profile

Bug #16007 » populate.py

Peter Amstutz, 05/01/2020 02:55 PM

 
import arvados
import arvados.util
import pprint

# Create a database with
# 500 users
# 100 groups
# 5000 projects

# each user belongs to 10 groups
# each group can read 10 projects
# there are 100 top level projects
# each project has 10 subprojects
# each subproject has 5 sub-sub-projects

def create_users(api, n=500):
users = {}
items = arvados.util.list_all(api.users().list)
for u in items:
users[u["username"]] = u
for i in range(0, n):
username = "user%i" % i
if username not in users:
u = api.users().create(body={"username": username}).execute()
users[u["username"]] = u
if i % 25 == 0:
print(i)
return users

def create_groups(api, n=100):
groups = {}
items = arvados.util.list_all(api.groups().list)
for u in items:
groups[u["name"]] = u
for i in range(0, n):
name = "group%i" % i
if name not in groups:
u = api.groups().create(body={"name": name, "group_class":"role"}).execute()
groups[u["name"]] = u
if i % 25 == 0:
print(i)
return groups

def add_users_to_groups(api, users, groups):
links = {}
items = arvados.util.list_all(api.links().list)
for u in items:
if "id" in u["properties"]:
links[u["properties"]["id"]] = u
for i in range(0, 500):
username = "user%i" % i
for j in range(0, 10):
linkid = "permission_link_%i_%i" % (i, j)
if linkid not in links:
joingroup = "group%i" % ((i+j) % 100)
u = api.links().create(body={"link_class": "permission",
"name": "can_read",
"tail_uuid": groups[joingroup]["uuid"],
"head_uuid": users[username]["uuid"],
"properties": {"id": linkid}}).execute()
u = api.links().create(body={"link_class": "permission",
"name": "can_manage",
"tail_uuid": users[username]["uuid"],
"head_uuid": groups[joingroup]["uuid"],
"properties": {"id": linkid}}).execute()
links[u["properties"]["id"]] = u
if i % 25 == 0:
print(i)
return links


users = create_users(arvados.api())

groups = create_groups(arvados.api())

links = add_users_to_groups(arvados.api(), users, groups)

pprint.pprint(links)
(2-2/2)