55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
##
|
|
## One-off script to export 6.002x users into the edX framework
|
|
##
|
|
## Could be modified to be general by:
|
|
## * Changing user_keys and up_keys to handle dates more cleanly
|
|
## * Providing a generic set of tables, rather than just users and user profiles
|
|
## * Handling certificates and grades
|
|
## * Handling merge/forks of UserProfile.meta
|
|
|
|
|
|
import datetime
|
|
import json
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.contrib.auth.models import User
|
|
|
|
from student.models import UserProfile
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = \
|
|
'''Exports all users and user profiles.
|
|
Caveat: Should be looked over before any run
|
|
for schema changes.
|
|
|
|
Current version grabs user_keys from
|
|
django.contrib.auth.models.User and up_keys
|
|
from student.userprofile. '''
|
|
|
|
def handle(self, *args, **options):
|
|
users = list(User.objects.all())
|
|
user_profiles = list(UserProfile.objects.all())
|
|
user_profile_dict = dict([(up.user_id, up) for up in user_profiles])
|
|
|
|
user_tuples = [(user_profile_dict[u.id], u) for u in users if u.id in user_profile_dict]
|
|
|
|
user_keys = ['id', 'username', 'email', 'password', 'is_staff',
|
|
'is_active', 'is_superuser', 'last_login', 'date_joined',
|
|
'password']
|
|
up_keys = ['language', 'location', 'meta', 'name', 'id', 'user_id']
|
|
|
|
def extract_dict(keys, object):
|
|
d = {}
|
|
for key in keys:
|
|
item = object.__getattribute__(key)
|
|
if type(item) == datetime.datetime:
|
|
item = item.isoformat()
|
|
d[key] = item
|
|
return d
|
|
|
|
extracted = [{'up': extract_dict(up_keys, t[0]), 'u':extract_dict(user_keys, t[1])} for t in user_tuples]
|
|
fp = open('transfer_users.txt', 'w')
|
|
json.dump(extracted, fp)
|
|
fp.close()
|