1
0
pygal/management/commands/export_userdata.py

74 Zeilen
2.6 KiB
Python

from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
import json
from themes.models import GetSettings
from themes.models import BottomBar
from users.models import UserProfile
from pygal.models import Item, Tag
from ._private import KEY_THEME_SETTINGS
from ._private import KEY_THEME_BOTTOMBAR
from ._private import KEY_USER_PROFILE
from ._private import KEY_USERDATA_FAVOURITE
from ._private import KEY_USERDATA_TAGS
from ._private import KEY_ACCESS_DATA
class Command(BaseCommand):
help = 'Export userdata in JSON-Format.'
def handle(self, *args, **options):
data = {}
#
# Access
#
if KEY_ACCESS_DATA not in data:
data[KEY_ACCESS_DATA] = {}
# public_access
data[KEY_ACCESS_DATA][''] = [item.rel_path for item in Item.objects.filter(public_access=True)]
# user_access
for u in User.objects.all():
data[KEY_ACCESS_DATA][u.username] = {}
data[KEY_ACCESS_DATA][u.username]['read_access'] = [item.rel_path for item in u.read_access.all()]
data[KEY_ACCESS_DATA][u.username]['modify_access'] = [item.rel_path for item in u.modify_access.all()]
#
# Favourites
#
if KEY_USERDATA_FAVOURITE not in data:
data[KEY_USERDATA_FAVOURITE] = {}
for user in User.objects.all():
favourites = user.favourite_of.all()
if len(favourites) > 0:
data[KEY_USERDATA_FAVOURITE][user.username] = [i.rel_path for i in favourites]
#
# Tags
#
if KEY_USERDATA_TAGS not in data:
data[KEY_USERDATA_TAGS] = {}
for tag in Tag.objects.all():
tag_key = tag.export_key()
if tag_key not in data[KEY_USERDATA_TAGS]:
data[KEY_USERDATA_TAGS][tag_key] = []
data[KEY_USERDATA_TAGS][tag.export_key()].append(tag.export_data())
#
# Settings
#
s = GetSettings()
data[KEY_THEME_SETTINGS] = s.export_data()
#
# Bottombar
#
if KEY_THEME_BOTTOMBAR not in data:
data[KEY_THEME_BOTTOMBAR] = []
for bb_entry in BottomBar.objects.all():
data[KEY_THEME_BOTTOMBAR].append(bb_entry.export_data())
#
# Userprofile
#
if KEY_USER_PROFILE not in data:
data[KEY_USER_PROFILE] = {}
for profile in UserProfile.objects.all():
data[KEY_USER_PROFILE][profile.export_key()] = profile.export_data()
self.stdout.write(json.dumps(data, indent=4, sort_keys=True))