In [ ]:
from __future__ import absolute_import
from requests.auth import HTTPBasicAuth
from collections import defaultdict
import requests
import json
import imp
import django.utils.six
import getpass
import pprint

# default is volatile memory backend, but also supports redis and postgres backends
# the user ID that updates any permissions is always added to the write permission list

# run as admin, loop through all projects and create bucket for each project
# update permissions to match project contributors' permissions

email = raw_input('Enter your email: ')
password = getpass.getpass('Enter your password: ')

headers = {'Content-Type': 'application/json'}
auth = (email, password)

r = requests.get('http://0.0.0.0:8888/v1/',auth=HTTPBasicAuth('user', 'pass')).json()

data = requests.get('http://localhost:8000/v2/nodes?format=json', auth=auth).json()
if 'errors' in data:
    print('Invalid email/password')

counter = 0; 
try:
    for item in data['data']:
        counter += 1;
except:
    KeyError
    
# loop through projects 
input = {}     
for i in range(0,counter):
    data = requests.get('http://localhost:8000/v2/nodes?format=json', auth=auth).json()
    input = {}
    input['title'] = data['data'][i]['attributes']['title']
    
    # create a metadata bucket for each project 
    r = requests.post('http://0.0.0.0:8888/v1/buckets',json={'data':{'id': input['title']}},auth=HTTPBasicAuth('user', 'pass'),headers=headers).json()
    title = input['title']
    
    # check if a project is public 
    # if public then grant read permissions to all authenticated users
    pub = ''
    input = {}
    input['public'] = data['data'][i]['attributes']['public']
    if input['public'] == True:
        pub = 'system.Authenticated'
    
    pid = data['data'][i]['id'] # project id
    data = requests.get('http://localhost:8000/v2/nodes/'+pid+'/contributors/?format=json', auth=auth).json()
    
    contrib = 0; 
    for item in data['data']:
        contrib += 1;
    
    per = defaultdict(list)
    
    input = {}
    for j in range(0,contrib):
        input['permissions'] = data['data'][j]['attributes']['permission']
        cname = data['data'][j]['embeds']['users']['data']['attributes']['full_name'] # contributor name
        
        # check contributors' permissions and update them in project bucket
        # (write implies read, write, and delete in Kinto)
        if 'admin' in input['permissions']:
            per['collection:create'].append(cname)
            per['group:create'].append(cname)
            per['write'].append(cname)
        elif ('write' in input['permissions']):
            per['write'].append(cname)
        elif 'read' in input['permissions']:
            per['read'].append(cname)
    if pub != '':
        per['read'].append(pub)
    r = requests.patch('http://0.0.0.0:8888/v1/buckets/'+title,json={'permissions': per},auth=HTTPBasicAuth('user', 'pass'), headers=headers).json()