mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-11 10:32:24 +01:00
Import users and songs from old Marietje.
This commit is contained in:
28
marietje/marietje/management/commands/importsongs.py
Normal file
28
marietje/marietje/management/commands/importsongs.py
Normal 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.')
|
||||||
@ -1,109 +1,35 @@
|
|||||||
import json
|
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.core.management.base import BaseCommand
|
||||||
from django.utils import timezone
|
from django.contrib.auth import get_user_model
|
||||||
from django.utils import translation
|
from queues.models import Queue, Playlist
|
||||||
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'Import users from a JSON file exported from a previous version of Marietje.'
|
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):
|
def handle(self, *args, **options):
|
||||||
translation.activate('nl')
|
filename = options['json_file']
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
if not settings.MIGRATION_KEY:
|
with open(filename) as fp:
|
||||||
raise ImproperlyConfigured('MIGRATION_KEY not specified')
|
for line in fp:
|
||||||
|
import_user = json.loads(line)
|
||||||
events_api_url = 'https://thalia.nu/pizzas/api/?apikey={}'.format(
|
user = User()
|
||||||
settings.MIGRATION_KEY)
|
user.username = import_user['_id'].lower()
|
||||||
|
user.name = import_user['n']
|
||||||
print('[*]Getting events json data')
|
user.email = user.username + '@science.ru.nl'
|
||||||
try:
|
user.password = 'md5$$' + import_user['p']
|
||||||
response = requests.get(events_api_url,
|
queue = Queue.objects.first()
|
||||||
headers={'User-Agent': 'Trumpery'})
|
if queue is None:
|
||||||
|
playlist = Playlist()
|
||||||
except requests.RequestException:
|
playlist.save()
|
||||||
print('[!]Could not get {}'.format(events_api_url))
|
random_playlist = Playlist()
|
||||||
return
|
random_playlist.save()
|
||||||
|
queue = Queue(name='Queue', playlist=playlist, random_playlist=random_playlist)
|
||||||
try:
|
queue.save()
|
||||||
data = response.json()
|
user.queue = queue
|
||||||
except json.decoder.JSONDecodeError:
|
user.save()
|
||||||
print('[!]No json data found')
|
print('Done importing users.')
|
||||||
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()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user