diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5a457ea9b5a7c8bc13a46b1e33219f82f18a1293..19b1c23cf3699519e16058625d22789b55afeb6f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,7 +28,7 @@ before_script: - pip install -r requirements/development.txt # To get Django tests to work you may need to create a settings file using # the following DATABASES: -# +# # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.postgresql_psycopg2', @@ -55,5 +55,8 @@ flake8: test: variables: DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB" + SECRET_KEY: "secret" + AUTHSCH_KEY: "secret" + AUTHSCH_SECRET: "secret" script: - python src/manage.py test diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..351a8fc4f8ce629c8efb58d0780121f3ee4a14d6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +language: python +python: + - "3.4" + - "3.5" + - "3.5-dev" # 3.5 development branch + - "3.6" + - "3.6-dev" # 3.6 development branch + - "3.7-dev" # 3.7 development branch + - "nightly" +services: + - postgresql +# command to install dependencies +install: + - pip install -r requirements/development.txt + +before_script: + - psql -c 'create database travis_ci_test;' -U postgres +env: + - DATABASE_URL="postgresql://postgres:postgres@postgres:5432/travis_ci_test" +# command to run tests +script: + - flake8 --max-line-length=125 --exclude=src/kszkepzes,migrations + - python src/manage.py migrate + - python src/manage.py test diff --git a/README.md b/README.md index f8cd16343a15f139b07ace346c28286271244997..38d506ef0bdc041ae74ccf9d5f01de0ca5fac7d7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # KSZKĂŠpzĂŠs Honlap -[](https://git.sch.bme.hu/kszk/devteam/kszkepzes/commits/master) -[](https://git.sch.bme.hu/kszk/devteam/kszkepzes/commits/master) +[](https://travis-ci.org/DevTeamSCH/kszkepzes) ## KĂśvetelmĂŠnyek diff --git a/src/account/__init__.py b/src/account/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/admin.py b/src/account/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..b9e5817dfac078d71887a8d90fdda504257bb88a --- /dev/null +++ b/src/account/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin +from . import models + + +@admin.register(models.Profile) +class ProfileAdmin(admin.ModelAdmin): + list_display = ('user_username', 'join_date') + + def user_username(self, obj): + return obj.user.username + + user_username.admin_order_field = 'user__username' + + +# Register your models here. +admin.site.register(models.GroupChoice) diff --git a/src/account/apps.py b/src/account/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..f7b1d19cf0169baf10b53f714ee88f35813b9ac9 --- /dev/null +++ b/src/account/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AccountConfig(AppConfig): + name = 'account' diff --git a/src/account/migrations/0001_initial.py b/src/account/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..8c4b5267abb550ca5a08c3e50a2b3f0f72a54d57 --- /dev/null +++ b/src/account/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 14:13 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('join_date', models.DateField()), + ('pref_group', models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('N', 'None')], default='None', max_length=10)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/src/account/migrations/0002_auto_20171114_2144.py b/src/account/migrations/0002_auto_20171114_2144.py new file mode 100644 index 0000000000000000000000000000000000000000..fc76cef337448de84b568817d4fe13dd023c0f13 --- /dev/null +++ b/src/account/migrations/0002_auto_20171114_2144.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 20:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='pref_group', + field=models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), ('N', 'None')], default='None', max_length=10), + ), + ] diff --git a/src/account/migrations/0003_profile_nick.py b/src/account/migrations/0003_profile_nick.py new file mode 100644 index 0000000000000000000000000000000000000000..7a3542787808c4e28493012327718f79731e9f3c --- /dev/null +++ b/src/account/migrations/0003_profile_nick.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-12-23 11:06 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0002_auto_20171114_2144'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='nick', + field=models.CharField(blank=True, max_length=15, null=True), + ), + ] diff --git a/src/account/migrations/0004_profile_signed.py b/src/account/migrations/0004_profile_signed.py new file mode 100644 index 0000000000000000000000000000000000000000..424407361c1f04b2068daab365199eb7d5aa9e2b --- /dev/null +++ b/src/account/migrations/0004_profile_signed.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-12-23 11:10 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0003_profile_nick'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='signed', + field=models.BooleanField(default=False), + ), + ] diff --git a/src/account/migrations/0005_auto_20171223_1455.py b/src/account/migrations/0005_auto_20171223_1455.py new file mode 100644 index 0000000000000000000000000000000000000000..d5e5fb83b2f2deeaf85dba89cb35de502a01ea4e --- /dev/null +++ b/src/account/migrations/0005_auto_20171223_1455.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-12-23 13:55 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0004_profile_signed'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='join_date', + field=models.DateField(auto_now=True), + ), + ] diff --git a/src/account/migrations/0006_auto_20180123_1713.py b/src/account/migrations/0006_auto_20180123_1713.py new file mode 100644 index 0000000000000000000000000000000000000000..035ce31da185ae28746fa3674f1670e1491e671f --- /dev/null +++ b/src/account/migrations/0006_auto_20180123_1713.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-23 16:13 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0005_auto_20171223_1455'), + ] + + operations = [ + migrations.CreateModel( + name='GroupChoice', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('pref_group', models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), ('N', 'None')], default='None', max_length=10)), + ], + ), + migrations.RemoveField( + model_name='profile', + name='pref_group', + ), + migrations.AddField( + model_name='groupchoice', + name='profile', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='preferd_groups', to='account.Profile'), + ), + migrations.AlterUniqueTogether( + name='groupchoice', + unique_together=set([('pref_group', 'profile')]), + ), + ] diff --git a/src/account/migrations/0007_auto_20180123_1723.py b/src/account/migrations/0007_auto_20180123_1723.py new file mode 100644 index 0000000000000000000000000000000000000000..27a4efe8c61f7cb19bb1f349a8c21b6e66f1e60e --- /dev/null +++ b/src/account/migrations/0007_auto_20180123_1723.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-23 16:23 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0006_auto_20180123_1713'), + ] + + operations = [ + migrations.RenameField( + model_name='groupchoice', + old_name='pref_group', + new_name='choice', + ), + migrations.AlterUniqueTogether( + name='groupchoice', + unique_together=set([('choice', 'profile')]), + ), + ] diff --git a/src/account/migrations/0008_auto_20180124_1821.py b/src/account/migrations/0008_auto_20180124_1821.py new file mode 100644 index 0000000000000000000000000000000000000000..fd3af443879f22344cc51f1334eec41e445948ad --- /dev/null +++ b/src/account/migrations/0008_auto_20180124_1821.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 17:21 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0007_auto_20180123_1723'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/account/migrations/0009_profile_motivation.py b/src/account/migrations/0009_profile_motivation.py new file mode 100644 index 0000000000000000000000000000000000000000..c9d1e0a2e2aa16abd91adb4970ac860e5e991ffc --- /dev/null +++ b/src/account/migrations/0009_profile_motivation.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 17:43 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0008_auto_20180124_1821'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='motivation', + field=models.TextField(null=True), + ), + ] diff --git a/src/account/migrations/0010_auto_20180124_1929.py b/src/account/migrations/0010_auto_20180124_1929.py new file mode 100644 index 0000000000000000000000000000000000000000..2a9b50d5d2e04d41c68b1aba0135774b1bd97bc3 --- /dev/null +++ b/src/account/migrations/0010_auto_20180124_1929.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 18:29 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0009_profile_motivation'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='groups', + field=models.ManyToManyField(related_name='profiles', to='account.GroupChoice'), + ), + migrations.AlterField( + model_name='groupchoice', + name='choice', + field=models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), ('N', 'None')], default='N', max_length=10, unique=True), + ), + migrations.AlterUniqueTogether( + name='groupchoice', + unique_together=set([]), + ), + migrations.RemoveField( + model_name='groupchoice', + name='profile', + ), + ] diff --git a/src/account/migrations/__init__.py b/src/account/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/models.py b/src/account/models.py new file mode 100644 index 0000000000000000000000000000000000000000..9c9f6825eabda79f1ca0363ced2c56c691959299 --- /dev/null +++ b/src/account/models.py @@ -0,0 +1,30 @@ +from django.db import models +from django.contrib.auth.models import User + + +class GroupChoice(models.Model): + TEAMS = ( + ('DT', 'DevTeam'), + ('NET', 'NeTeam'), + ('ST', 'SecurITeam'), + ('SYS', 'SysAdmin'), + ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), + ('N', 'None'), + ) + choice = models.CharField(max_length=10, choices=TEAMS, default='N', unique=True) + + def __str__(self): + return self.choice + + +class Profile(models.Model): + join_date = models.DateField(auto_now=True) + user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE) + motivation = models.TextField(null=True) + nick = models.CharField(max_length=15, blank=True, null=True) + signed = models.BooleanField(default=False, null=False) + groups = models.ManyToManyField(GroupChoice, related_name='profiles') + # Homeworks=models.ForeignKey(Homework) + + def __str__(self): + return self.user.username diff --git a/src/account/serializers.py b/src/account/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..92a0828d55c5b8cd3a575ba0d16cb9f4711f87c8 --- /dev/null +++ b/src/account/serializers.py @@ -0,0 +1,16 @@ +from rest_framework import serializers +from account import models + + +class ChoiceSerializer(serializers.ModelSerializer): + class Meta: + model = models.GroupChoice + fields = ('choice', 'profile') + + +class ProfileSerializer(serializers.ModelSerializer): + groups = serializers.SlugRelatedField(many=True, slug_field="choice", queryset=models.GroupChoice.objects.all()) + + class Meta: + model = models.Profile + fields = ('id', 'join_date', 'user', 'nick', 'motivation', 'signed', 'groups') diff --git a/src/account/tests.py b/src/account/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/urls.py b/src/account/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..ebf85f3d5bdf9885beb1ad7f28d1bce0e6624575 --- /dev/null +++ b/src/account/urls.py @@ -0,0 +1,7 @@ +from rest_framework import routers +from . import views + +router = routers.DefaultRouter() + +router.register(r'profiles', views.ProfileViewSet, base_name='profile') +urlpatterns = router.urls diff --git a/src/account/views.py b/src/account/views.py new file mode 100644 index 0000000000000000000000000000000000000000..58c405059a1c21a80a62d1b1de6e658277a0f350 --- /dev/null +++ b/src/account/views.py @@ -0,0 +1,22 @@ +from rest_framework import viewsets +from rest_framework import permissions +from rest_framework.response import Response +from rest_framework.decorators import list_route + +from . import models +from . import serializers + + +class ProfileViewSet(viewsets.ModelViewSet): + serializer_class = serializers.ProfileSerializer + permission_classes = (permissions.IsAuthenticated, ) + + def get_queryset(self): + user = self.request.user + if user.has_perm(permissions.IsAdminUser): + return models.Profile.objects.all() + + @list_route(methods=['get']) + def me(self, request): + serializer = self.serializer_class(request.user.profile) + return Response(serializer.data) diff --git a/src/kszkepzes/settings.py b/src/kszkepzes/settings.py index 3128c9d12e655bf39779c869a6b7dbd8f10f8a8d..5c53612e437be6058af830883882a6f066779668 100644 --- a/src/kszkepzes/settings.py +++ b/src/kszkepzes/settings.py @@ -42,6 +42,8 @@ INSTALLED_APPS = [ 'social_django', 'authsch', 'homework', + 'account', + 'stats', ] MIDDLEWARE = [ @@ -122,7 +124,7 @@ LOGIN_URL = "login/authsch/" LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Europe/Budapest' USE_I18N = True diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py index 16da3fbcb257357a307f9ec7a4b8ef3b52688453..cb9bbcdc434a5db23b90606ebf69b6744b115a65 100644 --- a/src/kszkepzes/urls.py +++ b/src/kszkepzes/urls.py @@ -20,4 +20,6 @@ urlpatterns = [ url(r'^admin/', admin.site.urls), url('', include('social_django.urls', namespace='social')), url(r'^api/v1/homework/', include('homework.urls')), + url(r'^api/v1/', include('stats.urls')), + url(r'^api/v1/', include('account.urls')), ] diff --git a/src/stats/__init__.py b/src/stats/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/admin.py b/src/stats/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..a551546486611e9b0125f25096c0125c1c1e962f --- /dev/null +++ b/src/stats/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import KszkEvent + + +admin.site.register(KszkEvent) diff --git a/src/stats/apps.py b/src/stats/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..2d09b92ca1ba59e93693ada2c0c0dd7340a9df15 --- /dev/null +++ b/src/stats/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class StatsConfig(AppConfig): + name = 'stats' diff --git a/src/stats/migrations/0001_initial.py b/src/stats/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..91e32fff21f7f6489284d3c0ab02d8b58949f049 --- /dev/null +++ b/src/stats/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 14:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='KszkEvent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('num_of_pers', models.IntegerField()), + ('visitors', models.ManyToManyField(related_name='visitor', to='account.Profile')), + ], + ), + ] diff --git a/src/stats/migrations/0002_auto_20171111_1646.py b/src/stats/migrations/0002_auto_20171111_1646.py new file mode 100644 index 0000000000000000000000000000000000000000..7a51b6e003a0e51bf2130254034f7a8bfda83b8b --- /dev/null +++ b/src/stats/migrations/0002_auto_20171111_1646.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 15:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='kszkevent', + name='num_of_pers', + field=models.IntegerField(editable=False), + ), + ] diff --git a/src/stats/migrations/0003_auto_20171114_2026.py b/src/stats/migrations/0003_auto_20171114_2026.py new file mode 100644 index 0000000000000000000000000000000000000000..4f61427074f3da7f8f404795ce58528a1be00bb6 --- /dev/null +++ b/src/stats/migrations/0003_auto_20171114_2026.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 19:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0002_auto_20171111_1646'), + ] + + operations = [ + migrations.AlterField( + model_name='kszkevent', + name='date', + field=models.DateTimeField(), + ), + ] diff --git a/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py b/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py new file mode 100644 index 0000000000000000000000000000000000000000..06bf71b435fa15cddf94d3352678cba5aa44784a --- /dev/null +++ b/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 19:38 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0003_auto_20171114_2026'), + ] + + operations = [ + migrations.RemoveField( + model_name='kszkevent', + name='num_of_pers', + ), + ] diff --git a/src/stats/migrations/__init__.py b/src/stats/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/models.py b/src/stats/models.py new file mode 100644 index 0000000000000000000000000000000000000000..b3cea98f8d0779a9f8b033e69beb89750e7b3d79 --- /dev/null +++ b/src/stats/models.py @@ -0,0 +1,13 @@ +from django.db import models +from account.models import Profile +from django.utils import timezone +from django.core.exceptions import ValidationError + + +class KszkEvent(models.Model): + date = models.DateTimeField(null=False) + visitors = models.ManyToManyField(Profile, related_name='visitor') + + def clean(self): + if self.date > timezone.now(): + raise ValidationError('Invalid date') diff --git a/src/stats/serializers.py b/src/stats/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..83569981c7ddc3d22fa64e94970bd98dddb71b85 --- /dev/null +++ b/src/stats/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from . import models + + +class KszkEventSerializer(serializers.ModelSerializer): + class Meta: + model = models.KszkEvent + fields = ('date', 'visitors') diff --git a/src/stats/tests.py b/src/stats/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/urls.py b/src/stats/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..7c03811c1c72b2efe61eb9009f450a2047212956 --- /dev/null +++ b/src/stats/urls.py @@ -0,0 +1,9 @@ +from rest_framework import routers + +from . import views + +router = routers.DefaultRouter() +router.register(r'events', views.KszkEventViewSet) + +# app_name = 'stats' +urlpatterns = router.urls diff --git a/src/stats/views.py b/src/stats/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c7ed3ecdf5621171f68cd8dcacc07621296b77c1 --- /dev/null +++ b/src/stats/views.py @@ -0,0 +1,9 @@ +from rest_framework import viewsets + +from . import models +from . import serializers + + +class KszkEventViewSet(viewsets.ModelViewSet): + serializer_class = serializers.KszkEventSerializer + queryset = models.KszkEvent.objects.all()