|
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)
|