Add word drawing support
This commit is contained in:
parent
cfaa2b2a50
commit
955cace9bd
@ -0,0 +1 @@
|
|||||||
|
default_app_config = 'words.apps.WordsConfig'
|
31
words/apps.py
Normal file
31
words/apps.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
|
def _current_word(self):
|
||||||
|
from .models import Draw
|
||||||
|
|
||||||
|
# If the user has an undecided draw, return that one
|
||||||
|
try:
|
||||||
|
word = Draw.objects.get(user=self, accepted=None).word
|
||||||
|
|
||||||
|
return word
|
||||||
|
except Draw.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# If the user has an accepted draw that is unfinished (ie. no work
|
||||||
|
# is uploaded), return that one
|
||||||
|
try:
|
||||||
|
word = Draw.objects.get(user=self, accepted=True, work=None).word
|
||||||
|
|
||||||
|
return word
|
||||||
|
except Draw.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
class WordsConfig(AppConfig):
|
||||||
|
name = 'words'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
User.current_word = _current_word
|
45
words/migrations/0002_draw_work.py
Normal file
45
words/migrations/0002_draw_work.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
from django.conf import settings
|
||||||
|
import django.utils.timezone
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('words', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Draw',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
|
||||||
|
('accepted', models.NullBooleanField()),
|
||||||
|
('timestamp', models.DateTimeField(default=django.utils.timezone.now)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ('timestamp',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Work',
|
||||||
|
fields=[
|
||||||
|
('draw', models.OneToOneField(to='words.Draw', serialize=False, primary_key=True, related_name='work')),
|
||||||
|
('language', models.CharField(max_length=5, db_index=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='draw',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='draw',
|
||||||
|
name='word',
|
||||||
|
field=models.ForeignKey(to='words.Word'),
|
||||||
|
),
|
||||||
|
]
|
@ -47,3 +47,16 @@ class WordTranslation(models.Model):
|
|||||||
('word', 'language'),
|
('word', 'language'),
|
||||||
('language', 'translation'),
|
('language', 'translation'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class Draw(models.Model):
|
||||||
|
user = models.ForeignKey(User)
|
||||||
|
word = models.ForeignKey(Word)
|
||||||
|
accepted = models.NullBooleanField()
|
||||||
|
timestamp = models.DateTimeField(default=timezone.now)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ('timestamp',)
|
||||||
|
|
||||||
|
class Work(models.Model):
|
||||||
|
draw = models.OneToOneField(Draw, related_name='work', primary_key=True)
|
||||||
|
language = models.CharField(max_length=5, db_index=True)
|
||||||
|
@ -3,7 +3,7 @@ from django.core.exceptions import ValidationError
|
|||||||
from django.utils.translation import activate
|
from django.utils.translation import activate
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from .models import Word, WordTranslation
|
from .models import Word, WordTranslation, Draw
|
||||||
|
|
||||||
class WordTest(TestCase):
|
class WordTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -54,3 +54,20 @@ class WordTest(TestCase):
|
|||||||
|
|
||||||
def test_translation_str(self):
|
def test_translation_str(self):
|
||||||
self.assertEquals('color', self.translation1.__str__())
|
self.assertEquals('color', self.translation1.__str__())
|
||||||
|
|
||||||
|
class DrawTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.user = User.objects.create_user(username='test', password='test')
|
||||||
|
self.word = Word.objects.create()
|
||||||
|
|
||||||
|
def test_current_word(self):
|
||||||
|
self.assertIsNone(self.user.current_word())
|
||||||
|
|
||||||
|
draw = Draw.objects.create(user=self.user,
|
||||||
|
word=self.word,
|
||||||
|
accepted=None)
|
||||||
|
self.assertEquals(self.word, self.user.current_word())
|
||||||
|
|
||||||
|
draw.accepted = True
|
||||||
|
draw.save()
|
||||||
|
self.assertEquals(self.word, self.user.current_word())
|
||||||
|
Loading…
Reference in New Issue
Block a user