Import users and songs from old Marietje.

This commit is contained in:
Jim Driessen
2017-01-21 00:11:54 +01:00
parent 250f6551cf
commit 404f1c169e
2 changed files with 54 additions and 100 deletions

View File

@ -0,0 +1,28 @@
import json
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from queues.models import Queue, Playlist
from songs.models import Song
class Command(BaseCommand):
help = 'Import songs from a JSON file exported from a previous version of Marietje.'
def add_arguments(self, parser):
parser.add_argument('json_file')
def handle(self, *args, **options):
filename = options['json_file']
User = get_user_model()
with open(filename) as fp:
for line in fp:
import_song = json.loads(line)
if 'd' in import_song and import_song['d']:
# Skip deleted songs.
continue
user = User.objects.filter(username=import_song['ub']).first()
song = Song(user=user, artist=import_song['a'], title=import_song['t'], duration=import_song['l'],
hash=import_song['k'], old_id=import_song['_id']['$oid'])
song.save()
print('Done importing songs.')

View File

@ -1,109 +1,35 @@
import json
from datetime import datetime
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ImproperlyConfigured
from django.core.management.base import BaseCommand
from django.utils import timezone
from django.utils import translation
def naive_to_aware(date_string):
"""Convert string of form '%Y-%m-%d %H:%M:%S'
to timezone aware datetime object"""
naive_datetime = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
return timezone.get_current_timezone().localize(naive_datetime)
from django.contrib.auth import get_user_model
from queues.models import Queue, Playlist
class Command(BaseCommand):
help = 'Import users from a JSON file exported from a previous version of Marietje.'
def add_arguments(self, parser):
parser.add_argument('json_file')
def handle(self, *args, **options):
translation.activate('nl')
filename = options['json_file']
User = get_user_model()
if not settings.MIGRATION_KEY:
raise ImproperlyConfigured('MIGRATION_KEY not specified')
events_api_url = 'https://thalia.nu/pizzas/api/?apikey={}'.format(
settings.MIGRATION_KEY)
print('[*]Getting events json data')
try:
response = requests.get(events_api_url,
headers={'User-Agent': 'Trumpery'})
except requests.RequestException:
print('[!]Could not get {}'.format(events_api_url))
return
try:
data = response.json()
except json.decoder.JSONDecodeError:
print('[!]No json data found')
return
activity_map = {}
product_map = {}
print('[*]Parsing pizza events.')
for event_data in data['events']:
event_date = naive_to_aware(event_data['order_to'])
events = events_models.Event.objects.filter(
start__year=event_date.year,
start__month=event_date.month,
start__day=event_date.day
)
if len(events) == 1:
event = events.first()
else:
for e in events:
if 'borrel' in e.title_nl or 'Programmeerwedstrijd'\
in e.title_nl:
event = e
new_event = pizzas_models.PizzaEvent(
event=event,
start=naive_to_aware(event_data['order_from']),
end=naive_to_aware(event_data['order_to']),
)
new_event.save()
activity_map[event_data['id']] = new_event.pk
print('[*]Parsing pizza products.')
for pizza_data in data['products']:
new_pizza = pizzas_models.Product(
name=pizza_data['name'],
description_nl=pizza_data['description'],
description_en=pizza_data['description'],
price=pizza_data['price'],
available=pizza_data['available']
)
new_pizza.save()
product_map[pizza_data['id']] = new_pizza.pk
print('[*]Parsing pizza orders.')
for order_data in data['orders']:
if order_data['username'] is None:
member = None
else:
registration_user = User.objects.get(
username=order_data['username']
)
member = members_models.Member.objects.get(
user=registration_user
)
new_order = pizzas_models.Order(
member=member,
paid=order_data['paid'],
name=order_data['name'],
product=pizzas_models.Product.objects.get(
pk=product_map[order_data['product_id']]
),
pizza_event=pizzas_models.PizzaEvent.objects.get(
pk=activity_map[order_data['activity_id']]
)
)
new_order.save()
with open(filename) as fp:
for line in fp:
import_user = json.loads(line)
user = User()
user.username = import_user['_id'].lower()
user.name = import_user['n']
user.email = user.username + '@science.ru.nl'
user.password = 'md5$$' + import_user['p']
queue = Queue.objects.first()
if queue is None:
playlist = Playlist()
playlist.save()
random_playlist = Playlist()
random_playlist.save()
queue = Queue(name='Queue', playlist=playlist, random_playlist=random_playlist)
queue.save()
user.queue = queue
user.save()
print('Done importing users.')