From 5656b15135b6854b2587836d48c0d5b51abe9114 Mon Sep 17 00:00:00 2001 From: Pawel Kowalski Date: Thu, 23 Aug 2018 13:22:13 +0200 Subject: [PATCH] Add rooms model, factories, dummy_data generation, graphql node --- server/api/schema.py | 4 +- .../core/management/commands/dummy_rooms.py | 49 +++++++++++-------- server/objectives/models.py | 6 +-- server/rooms/admin.py | 9 ++++ server/rooms/factories.py | 4 +- server/rooms/models.py | 7 ++- server/rooms/schema.py | 23 +++++++++ server/user/models.py | 4 +- 8 files changed, 73 insertions(+), 33 deletions(-) diff --git a/server/api/schema.py b/server/api/schema.py index ef6b9860..08d1d73d 100644 --- a/server/api/schema.py +++ b/server/api/schema.py @@ -1,13 +1,13 @@ import graphene from django.conf import settings from graphene_django.debug import DjangoDebug -from api import graphene_wagtail from book.schema import BookQuery from objectives.schema import ObjectivesQuery +from rooms.schema import RoomsQuery -class Query(ObjectivesQuery, BookQuery, graphene.ObjectType): +class Query(RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectType): # This class will inherit from multiple Queries if settings.DEBUG: diff --git a/server/core/management/commands/dummy_rooms.py b/server/core/management/commands/dummy_rooms.py index 62720ecb..1b9d7d3a 100644 --- a/server/core/management/commands/dummy_rooms.py +++ b/server/core/management/commands/dummy_rooms.py @@ -6,28 +6,31 @@ from django.conf import settings from django.contrib.auth import get_user_model from django.core.management import BaseCommand +from rooms.factories import RoomFactory +from rooms.models import Room from user.factories import UserGroupFactory +from user.models import UserGroup -# room_data = [{ -# { -# 'title': 'Ein historisches Festival', -# 'type': 'red', -# 'group': 'Klasse 3b - 2018/2019' -# # 'entries': [1, 1, 1, 1, 1, 1] -# }, -# { -# 'title': 'Erfahrungen Lehrbeginn', -# 'type': 'green', -# 'group': 'Klasse 3b - 2018/2019' -# # 'entries': [1] -# }, -# { -# 'title': 'Interview «Mein neues Umfeld»', -# 'type': 'brown', -# 'group': 'Hans Muster und 12 weitere Personen' -# # 'entries': [1, 1, 1, 1, 1, 1] -# } -# }] +data = [ + { + 'title': 'Ein historisches Festival', + 'appearance': 'red', + # 'group': 'Klasse 3b - 2018/2019' + # 'entries': [1, 1, 1, 1, 1, 1] + }, + { + 'title': 'Erfahrungen Lehrbeginn', + 'appearance': 'green', + # 'group': 'Klasse 3b - 2018/2019' + # 'entries': [1] + }, + { + 'title': 'Interview «Mein neues Umfeld»', + 'appearance': 'brown', + # 'group': 'Hans Muster und 12 weitere Personen' + # 'entries': [1, 1, 1, 1, 1, 1] + } +] class Command(BaseCommand): @@ -57,9 +60,15 @@ class Command(BaseCommand): # is_superuser=True # ) + Room.objects.all().delete() + UserGroup.objects.all().delete() + for i in range(0, 6): UserGroupFactory(users=(random.choices(get_user_model().objects.all(), k=3))) + for room_idx, room_data in enumerate(data): + RoomFactory.create(**room_data) + # for book_idx, book_data in enumerate(data): # book = BookFactory.create(parent=site.root_page, **self.filter_data(book_data, 'topics')) # diff --git a/server/objectives/models.py b/server/objectives/models.py index 50758733..421c94ba 100644 --- a/server/objectives/models.py +++ b/server/objectives/models.py @@ -15,7 +15,7 @@ class ObjectiveGroup(models.Model): # a user can define her own objectives, hence this optional param user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) - def __unicode__(self): + def __str__(self): return 'ObjectiveGroup {}-{}-{}'.format(self.id, self.module, self.title) @@ -27,7 +27,7 @@ class Objective(models.Model): text = models.CharField('text', blank=True, null=False, max_length=255) group = models.ForeignKey(ObjectiveGroup, blank=False, null=False, on_delete=models.CASCADE) - def __unicode__(self): + def __str__(self): return 'Objective {}-{}'.format(self.id, self.text) @@ -40,5 +40,5 @@ class ObjectiveProgressStatus(models.Model): objective = models.ForeignKey(Objective, blank=False, null=False, on_delete=models.CASCADE) user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) - def __unicode__(self): + def __str__(self): return 'Lernzielstatus {}-{}'.format(self.objective, self.done) diff --git a/server/rooms/admin.py b/server/rooms/admin.py index e69de29b..767cea9a 100644 --- a/server/rooms/admin.py +++ b/server/rooms/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from rooms.models import Room + + +@admin.register(Room) +class RoomAdmin(admin.ModelAdmin): + list_display = ('id', 'title', 'user_group', 'appearance') + list_filter = ('user_group', 'appearance',) diff --git a/server/rooms/factories.py b/server/rooms/factories.py index 8563480a..73793fe6 100644 --- a/server/rooms/factories.py +++ b/server/rooms/factories.py @@ -4,7 +4,7 @@ import factory from core.factories import fake from rooms.models import Room -from user.factories import UserGroupFactory +from user.models import UserGroup class RoomFactory(factory.django.DjangoModelFactory): @@ -12,5 +12,5 @@ class RoomFactory(factory.django.DjangoModelFactory): model = Room title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8))) - user_group = factory.SubFactory(UserGroupFactory) + user_group = factory.Iterator(UserGroup.objects.all()) appearance = factory.LazyAttribute(lambda x: random.choice(['red', 'green', 'brown'])) diff --git a/server/rooms/models.py b/server/rooms/models.py index f1b14a12..0814f482 100644 --- a/server/rooms/models.py +++ b/server/rooms/models.py @@ -1,17 +1,16 @@ from django.db import models -from django_extensions.db.models import TitleDescriptionModel +from django_extensions.db.models import TitleDescriptionModel, TitleSlugDescriptionModel from user.models import UserGroup -class Room(models.Model): +class Room(TitleSlugDescriptionModel): class Meta: verbose_name = 'Raum' verbose_name_plural = 'Räume' - title = models.CharField(blank=True, null=False, max_length=255) user_group = models.ForeignKey(UserGroup, blank=False, null=False, on_delete=models.CASCADE) appearance = models.CharField(blank=True, null=False, max_length=255) - def __unicode__(self): + def __str__(self): return 'Room {}-{}-{}'.format(self.id, self.title, self.user_group) diff --git a/server/rooms/schema.py b/server/rooms/schema.py index e69de29b..77f9fb5e 100644 --- a/server/rooms/schema.py +++ b/server/rooms/schema.py @@ -0,0 +1,23 @@ +import graphene +from graphene import relay +from graphene_django import DjangoObjectType +from graphene_django.filter import DjangoFilterConnectionField + +from rooms.models import Room + + +class RoomNode(DjangoObjectType): + pk = graphene.Int() + + class Meta: + model = Room + filter_fields = ['slug', 'user_group', 'appearance'] + interfaces = (relay.Node,) + + def resolve_pk(self, *args, **kwargs): + return self.id + + +class RoomsQuery(object): + room = relay.Node.Field(RoomNode) + rooms = DjangoFilterConnectionField(RoomNode) diff --git a/server/user/models.py b/server/user/models.py index 1e553e25..ce3208dd 100644 --- a/server/user/models.py +++ b/server/user/models.py @@ -14,5 +14,5 @@ class UserGroup(models.Model): is_deleted = models.BooleanField(blank=False, null=False, default=False) users = models.ManyToManyField(get_user_model()) - def __unicode__(self): - return 'ObjectiveGroup {}-{}-{}'.format(self.id, self.module, self.title) + def __str__(self): + return 'UserGroup {}-{}-{}'.format(self.id, self.name, self.year)