Skip to content

Commit

Permalink
feat(backend): Add import-character-codes command
Browse files Browse the repository at this point in the history
  • Loading branch information
barnslig committed Jun 4, 2022
1 parent 46d9a32 commit 78500a5
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import argparse
import csv
from django.core.management.base import BaseCommand, CommandError, CommandParser
from typing import Any, Optional

from trails.enums import ActionType
from trails.models import Character
from trails.qr_models import Code, Action


class Command(BaseCommand):
def add_arguments(self, parser: CommandParser) -> None:
parser.add_argument('csv', help='The CSV file',
type=argparse.FileType('r'))

def handle(self, *args: Any, **options: Any) -> Optional[str]:
data = csv.reader(options['csv'])

# first row is the header
header = next(data)

if header != ['uuid', 'one_shot', 'name', 'character']:
raise CommandError('Header is not correct')

for row in data:
# convert rows lists to dicts
row = dict(zip(header, row))

code, created = Code.objects.update_or_create(
uuid=row['uuid'],
defaults={
'uuid': row['uuid'],
'one_shot': row['one_shot'] == '1',
'name': row['name']
}
)

character, created = Character.objects.update_or_create(
character_class=row['character']
)

Action.objects.update_or_create(
code=code,
defaults={
'action_type': ActionType.CHARACTER,
'character': character
}
)

0 comments on commit 78500a5

Please sign in to comment.