From 67d6b458da633e6242ec3195d0c5baf4f3cee461 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Wed, 30 May 2018 14:58:59 +0200 Subject: [PATCH 01/16] TG-363 TG-371: create new app for subject management --- castellum_core/castellum_core/subject_management/__init__.py | 0 castellum_core/castellum_core/subject_management/admin.py | 3 +++ castellum_core/castellum_core/subject_management/apps.py | 5 +++++ .../castellum_core/subject_management/migrations/__init__.py | 0 castellum_core/castellum_core/subject_management/models.py | 3 +++ castellum_core/castellum_core/subject_management/views.py | 3 +++ 6 files changed, 14 insertions(+) create mode 100644 castellum_core/castellum_core/subject_management/__init__.py create mode 100644 castellum_core/castellum_core/subject_management/admin.py create mode 100644 castellum_core/castellum_core/subject_management/apps.py create mode 100644 castellum_core/castellum_core/subject_management/migrations/__init__.py create mode 100644 castellum_core/castellum_core/subject_management/models.py create mode 100644 castellum_core/castellum_core/subject_management/views.py diff --git a/castellum_core/castellum_core/subject_management/__init__.py b/castellum_core/castellum_core/subject_management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/castellum_core/castellum_core/subject_management/admin.py b/castellum_core/castellum_core/subject_management/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/castellum_core/castellum_core/subject_management/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/castellum_core/castellum_core/subject_management/apps.py b/castellum_core/castellum_core/subject_management/apps.py new file mode 100644 index 000000000..c2e71b3df --- /dev/null +++ b/castellum_core/castellum_core/subject_management/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class SubjectManagementConfig(AppConfig): + name = 'subject_management' diff --git a/castellum_core/castellum_core/subject_management/migrations/__init__.py b/castellum_core/castellum_core/subject_management/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/castellum_core/castellum_core/subject_management/models.py b/castellum_core/castellum_core/subject_management/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/castellum_core/castellum_core/subject_management/views.py b/castellum_core/castellum_core/subject_management/views.py new file mode 100644 index 000000000..91ea44a21 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. -- GitLab From c1a856bf8fa959c8a8257c409ad5c5100dea5c2d Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Thu, 31 May 2018 13:07:01 +0200 Subject: [PATCH 02/16] TG-363 TG-372: create model for subject and models for address data --- .../castellum_core/settings/default.py | 1 + .../migrations/0001_initial.py | 83 +++++++++++++++++++ .../subject_management/models.py | 3 - .../subject_management/models/__init__.py | 5 ++ .../subject_management/models/address.py | 46 ++++++++++ .../subject_management/models/subject.py | 26 ++++++ 6 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 castellum_core/castellum_core/subject_management/migrations/0001_initial.py delete mode 100644 castellum_core/castellum_core/subject_management/models.py create mode 100644 castellum_core/castellum_core/subject_management/models/__init__.py create mode 100644 castellum_core/castellum_core/subject_management/models/address.py create mode 100644 castellum_core/castellum_core/subject_management/models/subject.py diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index c5473adae..bb15981a2 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -20,6 +20,7 @@ INSTALLED_APPS = [ 'bootstrap4', 'castellum_auth.apps.CastellumAuthConfig', + 'subject_management', ] MIDDLEWARE = [ diff --git a/castellum_core/castellum_core/subject_management/migrations/0001_initial.py b/castellum_core/castellum_core/subject_management/migrations/0001_initial.py new file mode 100644 index 000000000..7b0595c9b --- /dev/null +++ b/castellum_core/castellum_core/subject_management/migrations/0001_initial.py @@ -0,0 +1,83 @@ +# Generated by Django 2.0.4 on 2018-05-31 11:02 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Address', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('zip_code', models.CharField(max_length=5)), + ('street', models.CharField(max_length=128)), + ('house_number', models.CharField(max_length=5)), + ('additional_information', models.CharField(blank=True, default='', max_length=32)), + ], + options={ + 'verbose_name_plural': 'Addresses', + 'ordering': ('city__country__name', 'city__name', 'zip_code', 'street', 'house_number', 'additional_information'), + 'verbose_name': 'Address', + }, + ), + migrations.CreateModel( + name='City', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128)), + ], + options={ + 'verbose_name_plural': 'Cities', + 'ordering': ('country__name', 'name'), + 'verbose_name': 'City', + }, + ), + migrations.CreateModel( + name='Country', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=64, unique=True)), + ], + options={ + 'verbose_name_plural': 'Countries', + 'ordering': ('name',), + 'verbose_name': 'Country', + }, + ), + migrations.CreateModel( + name='Subject', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('first_name', models.CharField(max_length=64)), + ('last_name', models.CharField(max_length=64)), + ('gender', models.CharField(choices=[('f', 'female'), ('m', 'male')], default='f', max_length=1)), + ('birthday', models.DateField()), + ('email', models.EmailField(blank=True, default='', max_length=128)), + ('phone_number', models.CharField(blank=True, default='', max_length=32)), + ('phone_number_alternative', models.CharField(blank=True, default='', max_length=32)), + ('address', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='subject_management.Address')), + ], + ), + migrations.AddField( + model_name='city', + name='country', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subject_management.Country'), + ), + migrations.AddField( + model_name='address', + name='city', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subject_management.City'), + ), + migrations.AlterUniqueTogether( + name='city', + unique_together={('name', 'country')}, + ), + ] diff --git a/castellum_core/castellum_core/subject_management/models.py b/castellum_core/castellum_core/subject_management/models.py deleted file mode 100644 index 71a836239..000000000 --- a/castellum_core/castellum_core/subject_management/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/castellum_core/castellum_core/subject_management/models/__init__.py b/castellum_core/castellum_core/subject_management/models/__init__.py new file mode 100644 index 000000000..cdd09a496 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/models/__init__.py @@ -0,0 +1,5 @@ +from .address import Address, City, Country +from .subject import Subject + + +__all__ = Address, City, Country, Subject diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py new file mode 100644 index 000000000..084d9b686 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -0,0 +1,46 @@ +from django.db import models + + +class Country(models.Model): + name = models.CharField(max_length=64, unique=True) + + def __str__(self): + return self.name + + class Meta: + ordering = "name", + verbose_name = "Country" + verbose_name_plural = "Countries" + + +class City(models.Model): + name = models.CharField(max_length=128) + country = models.ForeignKey(Country, on_delete=models.CASCADE) + + def __str__(self): + return "{}, {}".format(self.name, self.country.name) + + class Meta: + ordering = "country__name", "name" + unique_together = "name", "country" + verbose_name = "City" + verbose_name_plural = "Cities" + + +class Address(models.Model): + city = models.ForeignKey(City, on_delete=models.CASCADE) + zip_code = models.CharField(max_length=5) + street = models.CharField(max_length=128) + house_number = models.CharField(max_length=5) + additional_information = models.CharField(max_length=32, blank=True, default="") + + def __str__(self): + return "{} {}, {} {} {}".format(self.zip_code, self.city.name, self.street, + self.house_number, self.additional_information) + + + class Meta: + ordering = ("city__country__name", "city__name", "zip_code", "street", "house_number", + "additional_information") + verbose_name = "Address" + verbose_name_plural = "Addresses" diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py new file mode 100644 index 000000000..911dff54b --- /dev/null +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -0,0 +1,26 @@ +import uuid + +from django.db import models + +from . import Address + + +class Subject(models.Model): + GENDER = ( + ("f", "female"), + ("m", "male"), + ) + + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + + first_name = models.CharField(max_length=64) + last_name = models.CharField(max_length=64) + + gender = models.CharField(max_length=1, choices=GENDER, default="f") + + birthday = models.DateField() + + address = models.ForeignKey(Address, blank=True, null=True, on_delete=models.SET_NULL) + email = models.EmailField(max_length=128, blank=True, default="") + phone_number = models.CharField(max_length=32, blank=True, default="") + phone_number_alternative = models.CharField(max_length=32, blank=True, default="") -- GitLab From 5f5a5df3e288a0b6fb4ff0ea9525484a130e2080 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Thu, 31 May 2018 13:07:25 +0200 Subject: [PATCH 03/16] TG-363 TG-372: add admin --- .../subject_management/admin.py | 3 --- .../subject_management/admin/__init__.py | 12 +++++++++++ .../subject_management/admin/address.py | 15 +++++++++++++ .../subject_management/admin/subject.py | 21 +++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) delete mode 100644 castellum_core/castellum_core/subject_management/admin.py create mode 100644 castellum_core/castellum_core/subject_management/admin/__init__.py create mode 100644 castellum_core/castellum_core/subject_management/admin/address.py create mode 100644 castellum_core/castellum_core/subject_management/admin/subject.py diff --git a/castellum_core/castellum_core/subject_management/admin.py b/castellum_core/castellum_core/subject_management/admin.py deleted file mode 100644 index 8c38f3f3d..000000000 --- a/castellum_core/castellum_core/subject_management/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/castellum_core/castellum_core/subject_management/admin/__init__.py b/castellum_core/castellum_core/subject_management/admin/__init__.py new file mode 100644 index 000000000..014837308 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/admin/__init__.py @@ -0,0 +1,12 @@ +from django.contrib import admin + +from .address import AddressAdmin, CityAdmin, CountryAdmin +from .subject import SubjectAdmin + +from ..models import Address, City, Country, Subject + + +admin.site.register(Address, AddressAdmin) +admin.site.register(City, CityAdmin) +admin.site.register(Country, CountryAdmin) +admin.site.register(Subject, SubjectAdmin) diff --git a/castellum_core/castellum_core/subject_management/admin/address.py b/castellum_core/castellum_core/subject_management/admin/address.py new file mode 100644 index 000000000..319565488 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/admin/address.py @@ -0,0 +1,15 @@ +from django.contrib import admin + + +class CountryAdmin(admin.ModelAdmin): + pass + + +class CityAdmin(admin.ModelAdmin): + list_display = "name", "country", + list_per_page = 200 + + +class AddressAdmin(admin.ModelAdmin): + list_display = "city", "zip_code", "street", "house_number", "additional_information" + list_per_page = 200 diff --git a/castellum_core/castellum_core/subject_management/admin/subject.py b/castellum_core/castellum_core/subject_management/admin/subject.py new file mode 100644 index 000000000..837e3146d --- /dev/null +++ b/castellum_core/castellum_core/subject_management/admin/subject.py @@ -0,0 +1,21 @@ +from django.contrib import admin + + +class SubjectAdmin(admin.ModelAdmin): + list_display = "first_name", "last_name", "address", "email", "phone_number" + list_display_links = "first_name", "last_name" + list_per_page = 200 + search_fields = "first_name", "last_name" + + fieldsets = ( + (None, { + "fields": ( + ("first_name", "last_name"), + "gender", + "birthday", + ), + }), + ("Contact Data", { + "fields": ("address", "email", ("phone_number", "phone_number_alternative")) + }), + ) -- GitLab From 0c95ce793c8c45e822d9153b476de46595e6be8c Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Fri, 1 Jun 2018 10:46:46 +0200 Subject: [PATCH 04/16] fix flake8 errors --- .../castellum_core/subject_management/models/address.py | 1 - castellum_core/castellum_core/subject_management/views.py | 3 --- 2 files changed, 4 deletions(-) delete mode 100644 castellum_core/castellum_core/subject_management/views.py diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index 084d9b686..3198c2024 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -38,7 +38,6 @@ class Address(models.Model): return "{} {}, {} {} {}".format(self.zip_code, self.city.name, self.street, self.house_number, self.additional_information) - class Meta: ordering = ("city__country__name", "city__name", "zip_code", "street", "house_number", "additional_information") diff --git a/castellum_core/castellum_core/subject_management/views.py b/castellum_core/castellum_core/subject_management/views.py deleted file mode 100644 index 91ea44a21..000000000 --- a/castellum_core/castellum_core/subject_management/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. -- GitLab From 28cfbd9bfdb1fcd0f20c4b56bb88f5b8db59c12c Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Fri, 1 Jun 2018 11:54:05 +0200 Subject: [PATCH 05/16] reduce development settings file --- .../castellum_core/settings/__init__.py | 2 +- .../castellum_core/settings/default.py | 13 +++++++++++++ .../castellum_core/settings/development.py | 16 ---------------- 3 files changed, 14 insertions(+), 17 deletions(-) delete mode 100644 castellum_core/castellum_core/castellum_core/settings/development.py diff --git a/castellum_core/castellum_core/castellum_core/settings/__init__.py b/castellum_core/castellum_core/castellum_core/settings/__init__.py index 79be19769..4a32fccbc 100644 --- a/castellum_core/castellum_core/castellum_core/settings/__init__.py +++ b/castellum_core/castellum_core/castellum_core/settings/__init__.py @@ -1 +1 @@ -from .development import * +from .default import * diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index bb15981a2..0afc93dd7 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -5,6 +5,10 @@ from django.utils import timezone BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +SECRET_KEY = os.environ.get("SECRET_KEY", os.urandom(32)) + +DEBUG = "on" == os.environ.get("DEBUG", "on") + ALLOWED_HOSTS = [] @@ -39,6 +43,15 @@ MIDDLEWARE = [ ROOT_URLCONF = 'castellum_core.urls' + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', diff --git a/castellum_core/castellum_core/castellum_core/settings/development.py b/castellum_core/castellum_core/castellum_core/settings/development.py deleted file mode 100644 index b59aa343f..000000000 --- a/castellum_core/castellum_core/castellum_core/settings/development.py +++ /dev/null @@ -1,16 +0,0 @@ -from .default import * - - -SECRET_KEY = 'i#$kwk(s24ysn+l%+c!*z9u4+45)oex!-s#!bux#wf2pv2cc0d' - -DEBUG = True - - -# Database - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - } -} -- GitLab From f82b1b1534ca146b2fac1f34d5a844d1ef19ad45 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Fri, 1 Jun 2018 15:51:53 +0200 Subject: [PATCH 06/16] route subject management models into separate database --- castellum_core/Makefile | 1 + .../castellum_core/settings/databases.py | 19 +++++++++++++++++++ .../castellum_core/settings/default.py | 10 ++-------- .../subject_management/routers.py | 19 +++++++++++++++++++ example_deployment/settings.py | 6 ++++++ 5 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 castellum_core/castellum_core/castellum_core/settings/databases.py create mode 100644 castellum_core/castellum_core/subject_management/routers.py diff --git a/castellum_core/Makefile b/castellum_core/Makefile index 0b72682d6..2b7bd51cd 100644 --- a/castellum_core/Makefile +++ b/castellum_core/Makefile @@ -10,6 +10,7 @@ bootstrap: install migrate createsuperuser castellum_core/locale/de/LC_MESSAGES/ migrate: $(MANAGEPY) migrate + $(MANAGEPY) migrate --database=subject_management makemigrations: $(MANAGEPY) makemigrations diff --git a/castellum_core/castellum_core/castellum_core/settings/databases.py b/castellum_core/castellum_core/castellum_core/settings/databases.py new file mode 100644 index 000000000..516524637 --- /dev/null +++ b/castellum_core/castellum_core/castellum_core/settings/databases.py @@ -0,0 +1,19 @@ +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + + +DATABASE_ROUTERS = [ + 'subject_management.routers.SubjectManagementRouter', +] + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + }, + 'subject_management': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'subject_management.sqlite3'), + }, +} diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index 0afc93dd7..3e8432d79 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -2,6 +2,8 @@ import os from django.utils import timezone +from .databases import DATABASE_ROUTERS, DATABASES + BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @@ -44,14 +46,6 @@ MIDDLEWARE = [ ROOT_URLCONF = 'castellum_core.urls' -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - } -} - - TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', diff --git a/castellum_core/castellum_core/subject_management/routers.py b/castellum_core/castellum_core/subject_management/routers.py new file mode 100644 index 000000000..25586f899 --- /dev/null +++ b/castellum_core/castellum_core/subject_management/routers.py @@ -0,0 +1,19 @@ +APP_LABEL = "subject_management" + + +class SubjectManagementRouter: + def db_for_read(self, model, **hints): + if model._meta.app_label == APP_LABEL: + return APP_LABEL + + def db_for_write(self, model, **hints): + if model._meta.app_label == APP_LABEL: + return APP_LABEL + + def allow_relation(self, obj1, obj2, **hints): + if obj1._meta.app_label == obj2._meta.app_label and obj1._meta.app_label == APP_LABEL: + return True + + def allow_migrate(self, db, app_label, **hints): + if db == APP_LABEL: + return app_label == APP_LABEL diff --git a/example_deployment/settings.py b/example_deployment/settings.py index cfdfa2942..2ddc3429b 100644 --- a/example_deployment/settings.py +++ b/example_deployment/settings.py @@ -15,6 +15,12 @@ DATABASES = { 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', + }, + 'subject_management': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': 'postgres', + 'USER': 'postgres', + 'HOST': 'db', } } -- GitLab From 9bbe9622cd0a9c26720f2892fb3d6f42116fc4f9 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Fri, 1 Jun 2018 16:24:06 +0200 Subject: [PATCH 07/16] add tests for str methods in models --- .../subject_management/models/address.py | 4 ++-- .../subject_management/models/conftest.py | 19 +++++++++++++++++++ .../subject_management/models/test_address.py | 7 +++++++ .../subject_management/models/test_city.py | 2 ++ .../subject_management/models/test_country.py | 2 ++ 5 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 castellum_core/tests/subject_management/models/conftest.py create mode 100644 castellum_core/tests/subject_management/models/test_address.py create mode 100644 castellum_core/tests/subject_management/models/test_city.py create mode 100644 castellum_core/tests/subject_management/models/test_country.py diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index 3198c2024..49cac93d0 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -35,8 +35,8 @@ class Address(models.Model): additional_information = models.CharField(max_length=32, blank=True, default="") def __str__(self): - return "{} {}, {} {} {}".format(self.zip_code, self.city.name, self.street, - self.house_number, self.additional_information) + street = " ".join([self.street, self.house_number, self.additional_information]).strip() + return "{} {}, {}".format(self.zip_code, self.city.name, street) class Meta: ordering = ("city__country__name", "city__name", "zip_code", "street", "house_number", diff --git a/castellum_core/tests/subject_management/models/conftest.py b/castellum_core/tests/subject_management/models/conftest.py new file mode 100644 index 000000000..a1d5cb7d1 --- /dev/null +++ b/castellum_core/tests/subject_management/models/conftest.py @@ -0,0 +1,19 @@ +import pytest + +from subject_management.models import Address, City, Country + + +@pytest.fixture +def country(): + return Country(name="Germany") + + +@pytest.fixture +def city(country): + return City(name="Berlin", country=country) + + +@pytest.fixture +def address(city): + return Address(city=city, zip_code="10787", street="Hardenbergplatz", house_number="8", + additional_information="") diff --git a/castellum_core/tests/subject_management/models/test_address.py b/castellum_core/tests/subject_management/models/test_address.py new file mode 100644 index 000000000..434307423 --- /dev/null +++ b/castellum_core/tests/subject_management/models/test_address.py @@ -0,0 +1,7 @@ +def test_str(address): + assert "10787 Berlin, Hardenbergplatz 8" == str(address) + + +def test_str_with_additional_information(address): + address.additional_information = "appartment 3" + assert "10787 Berlin, Hardenbergplatz 8 appartment 3" == str(address) diff --git a/castellum_core/tests/subject_management/models/test_city.py b/castellum_core/tests/subject_management/models/test_city.py new file mode 100644 index 000000000..7d137b2f1 --- /dev/null +++ b/castellum_core/tests/subject_management/models/test_city.py @@ -0,0 +1,2 @@ +def test_str(city): + assert "Berlin, Germany" == str(city) diff --git a/castellum_core/tests/subject_management/models/test_country.py b/castellum_core/tests/subject_management/models/test_country.py new file mode 100644 index 000000000..81ecc6724 --- /dev/null +++ b/castellum_core/tests/subject_management/models/test_country.py @@ -0,0 +1,2 @@ +def test_str(country): + assert "Germany" == str(country) -- GitLab From f1b5d01e6d3f4ded35975a06b1f9bece35477a8b Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Tue, 5 Jun 2018 14:50:23 +0200 Subject: [PATCH 08/16] provide translations for models --- .../subject_management/models/address.py | 30 ++++++++++--------- .../subject_management/models/subject.py | 23 +++++++------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index 49cac93d0..129456d79 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -1,21 +1,22 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ class Country(models.Model): - name = models.CharField(max_length=64, unique=True) + name = models.CharField(_("name"), max_length=64, unique=True) def __str__(self): return self.name class Meta: ordering = "name", - verbose_name = "Country" - verbose_name_plural = "Countries" + verbose_name = _("Country") + verbose_name_plural = _("Countries") class City(models.Model): - name = models.CharField(max_length=128) - country = models.ForeignKey(Country, on_delete=models.CASCADE) + name = models.CharField(_("name"), max_length=128) + country = models.ForeignKey(_("Country"), Country, on_delete=models.CASCADE) def __str__(self): return "{}, {}".format(self.name, self.country.name) @@ -23,16 +24,17 @@ class City(models.Model): class Meta: ordering = "country__name", "name" unique_together = "name", "country" - verbose_name = "City" - verbose_name_plural = "Cities" + verbose_name = _("City") + verbose_name_plural = _("Cities") class Address(models.Model): - city = models.ForeignKey(City, on_delete=models.CASCADE) - zip_code = models.CharField(max_length=5) - street = models.CharField(max_length=128) - house_number = models.CharField(max_length=5) - additional_information = models.CharField(max_length=32, blank=True, default="") + city = models.ForeignKey(_("City"), City, on_delete=models.CASCADE) + zip_code = models.CharField(_("zip code"), max_length=5) + street = models.CharField(_("street"), max_length=128) + house_number = models.CharField(_("house_number"), max_length=5) + additional_information = models.CharField(_("additional information"), max_length=32, + blank=True, default="") def __str__(self): street = " ".join([self.street, self.house_number, self.additional_information]).strip() @@ -41,5 +43,5 @@ class Address(models.Model): class Meta: ordering = ("city__country__name", "city__name", "zip_code", "street", "house_number", "additional_information") - verbose_name = "Address" - verbose_name_plural = "Addresses" + verbose_name = _("Address") + verbose_name_plural = _("Addresses") diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py index 911dff54b..bcabeb97f 100644 --- a/castellum_core/castellum_core/subject_management/models/subject.py +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -1,26 +1,29 @@ import uuid from django.db import models +from django.utils.translation import ugettext_lazy as _ from . import Address class Subject(models.Model): GENDER = ( - ("f", "female"), - ("m", "male"), + ("f", _("female")), + ("m", _("male")), ) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - first_name = models.CharField(max_length=64) - last_name = models.CharField(max_length=64) + first_name = models.CharField(_("first name"), max_length=64) + last_name = models.CharField(_("last name"), max_length=64) - gender = models.CharField(max_length=1, choices=GENDER, default="f") + gender = models.CharField(_("gender"), max_length=1, choices=GENDER, default="f") - birthday = models.DateField() + birthday = models.DateField(_("birthday")) - address = models.ForeignKey(Address, blank=True, null=True, on_delete=models.SET_NULL) - email = models.EmailField(max_length=128, blank=True, default="") - phone_number = models.CharField(max_length=32, blank=True, default="") - phone_number_alternative = models.CharField(max_length=32, blank=True, default="") + address = models.ForeignKey(_("Address"), Address, blank=True, null=True, + on_delete=models.SET_NULL) + email = models.EmailField(_("email"), max_length=128, blank=True, default="") + phone_number = models.CharField(_("phone number"), max_length=32, blank=True, default="") + phone_number_alternative = models.CharField(_("phone number alternative"), max_length=32, + blank=True, default="") -- GitLab From 4daa67a7be2b246aaf6a070b007d3a304b045cde Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Tue, 5 Jun 2018 15:00:31 +0200 Subject: [PATCH 09/16] fix verbose name for foreign keys --- .../castellum_core/subject_management/models/address.py | 4 ++-- .../castellum_core/subject_management/models/subject.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index 129456d79..52d76824d 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -16,7 +16,7 @@ class Country(models.Model): class City(models.Model): name = models.CharField(_("name"), max_length=128) - country = models.ForeignKey(_("Country"), Country, on_delete=models.CASCADE) + country = models.ForeignKey(Country, verbose_name=_("Country"), on_delete=models.CASCADE) def __str__(self): return "{}, {}".format(self.name, self.country.name) @@ -29,7 +29,7 @@ class City(models.Model): class Address(models.Model): - city = models.ForeignKey(_("City"), City, on_delete=models.CASCADE) + city = models.ForeignKey(City, verbose_name=_("City"), on_delete=models.CASCADE) zip_code = models.CharField(_("zip code"), max_length=5) street = models.CharField(_("street"), max_length=128) house_number = models.CharField(_("house_number"), max_length=5) diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py index bcabeb97f..138b253d0 100644 --- a/castellum_core/castellum_core/subject_management/models/subject.py +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -21,7 +21,7 @@ class Subject(models.Model): birthday = models.DateField(_("birthday")) - address = models.ForeignKey(_("Address"), Address, blank=True, null=True, + address = models.ForeignKey(Address, blank=True, null=True, verbose_name=_("Address"), on_delete=models.SET_NULL) email = models.EmailField(_("email"), max_length=128, blank=True, default="") phone_number = models.CharField(_("phone number"), max_length=32, blank=True, default="") -- GitLab From bb27ab7bc7135b60a05125320e80f32372b10daa Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Tue, 5 Jun 2018 15:07:22 +0200 Subject: [PATCH 10/16] remove default values from char fields --- .../castellum_core/subject_management/models/address.py | 2 +- .../castellum_core/subject_management/models/subject.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index 52d76824d..f5d0ac3c9 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -34,7 +34,7 @@ class Address(models.Model): street = models.CharField(_("street"), max_length=128) house_number = models.CharField(_("house_number"), max_length=5) additional_information = models.CharField(_("additional information"), max_length=32, - blank=True, default="") + blank=True) def __str__(self): street = " ".join([self.street, self.house_number, self.additional_information]).strip() diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py index 138b253d0..4e6ccd519 100644 --- a/castellum_core/castellum_core/subject_management/models/subject.py +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -23,7 +23,7 @@ class Subject(models.Model): address = models.ForeignKey(Address, blank=True, null=True, verbose_name=_("Address"), on_delete=models.SET_NULL) - email = models.EmailField(_("email"), max_length=128, blank=True, default="") - phone_number = models.CharField(_("phone number"), max_length=32, blank=True, default="") + email = models.EmailField(_("email"), max_length=128, blank=True) + phone_number = models.CharField(_("phone number"), max_length=32, blank=True) phone_number_alternative = models.CharField(_("phone number alternative"), max_length=32, - blank=True, default="") + blank=True) -- GitLab From 99a70bcd4714a318f3bbbd14aca283881f74ac4d Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Wed, 6 Jun 2018 12:15:50 +0200 Subject: [PATCH 11/16] add a third option for gender --- .../castellum_core/subject_management/models/subject.py | 1 + 1 file changed, 1 insertion(+) diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py index 4e6ccd519..daec43ec4 100644 --- a/castellum_core/castellum_core/subject_management/models/subject.py +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -10,6 +10,7 @@ class Subject(models.Model): GENDER = ( ("f", _("female")), ("m", _("male")), + ("*", _("diverse")), ) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) -- GitLab From d12d6a0b796d686aabb15dc8cc8b0bcab4809c09 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Thu, 7 Jun 2018 13:21:23 +0200 Subject: [PATCH 12/16] add license header to all new files --- .../subject_management/admin/__init__.py | 21 +++++++++++++++++++ .../subject_management/admin/address.py | 21 +++++++++++++++++++ .../subject_management/admin/subject.py | 21 +++++++++++++++++++ .../castellum_core/subject_management/apps.py | 21 +++++++++++++++++++ .../subject_management/models/__init__.py | 21 +++++++++++++++++++ .../subject_management/models/address.py | 21 +++++++++++++++++++ .../subject_management/models/subject.py | 21 +++++++++++++++++++ .../subject_management/routers.py | 21 +++++++++++++++++++ 8 files changed, 168 insertions(+) diff --git a/castellum_core/castellum_core/subject_management/admin/__init__.py b/castellum_core/castellum_core/subject_management/admin/__init__.py index 014837308..067eaa8d3 100644 --- a/castellum_core/castellum_core/subject_management/admin/__init__.py +++ b/castellum_core/castellum_core/subject_management/admin/__init__.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from django.contrib import admin from .address import AddressAdmin, CityAdmin, CountryAdmin diff --git a/castellum_core/castellum_core/subject_management/admin/address.py b/castellum_core/castellum_core/subject_management/admin/address.py index 319565488..37f6f946d 100644 --- a/castellum_core/castellum_core/subject_management/admin/address.py +++ b/castellum_core/castellum_core/subject_management/admin/address.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from django.contrib import admin diff --git a/castellum_core/castellum_core/subject_management/admin/subject.py b/castellum_core/castellum_core/subject_management/admin/subject.py index 837e3146d..af6070980 100644 --- a/castellum_core/castellum_core/subject_management/admin/subject.py +++ b/castellum_core/castellum_core/subject_management/admin/subject.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from django.contrib import admin diff --git a/castellum_core/castellum_core/subject_management/apps.py b/castellum_core/castellum_core/subject_management/apps.py index c2e71b3df..778ea66e5 100644 --- a/castellum_core/castellum_core/subject_management/apps.py +++ b/castellum_core/castellum_core/subject_management/apps.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from django.apps import AppConfig diff --git a/castellum_core/castellum_core/subject_management/models/__init__.py b/castellum_core/castellum_core/subject_management/models/__init__.py index cdd09a496..026d42f6e 100644 --- a/castellum_core/castellum_core/subject_management/models/__init__.py +++ b/castellum_core/castellum_core/subject_management/models/__init__.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from .address import Address, City, Country from .subject import Subject diff --git a/castellum_core/castellum_core/subject_management/models/address.py b/castellum_core/castellum_core/subject_management/models/address.py index f5d0ac3c9..1e1a7faee 100644 --- a/castellum_core/castellum_core/subject_management/models/address.py +++ b/castellum_core/castellum_core/subject_management/models/address.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + from django.db import models from django.utils.translation import ugettext_lazy as _ diff --git a/castellum_core/castellum_core/subject_management/models/subject.py b/castellum_core/castellum_core/subject_management/models/subject.py index daec43ec4..335e9f7f3 100644 --- a/castellum_core/castellum_core/subject_management/models/subject.py +++ b/castellum_core/castellum_core/subject_management/models/subject.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + import uuid from django.db import models diff --git a/castellum_core/castellum_core/subject_management/routers.py b/castellum_core/castellum_core/subject_management/routers.py index 25586f899..98752bfec 100644 --- a/castellum_core/castellum_core/subject_management/routers.py +++ b/castellum_core/castellum_core/subject_management/routers.py @@ -1,3 +1,24 @@ +# (c) 2018 +# MPIB , +# MPI-CBS , +# MPIP +# +# This file is part of Castellum. +# +# Castellum is free software; you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Castellum is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with Castellum. If not, see +# . + APP_LABEL = "subject_management" -- GitLab From 595df793a9e04b2c799482f422f144e052337932 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Fri, 8 Jun 2018 12:47:28 +0200 Subject: [PATCH 13/16] fix allow_migrate in subject_management router --- .../subject_management/routers.py | 2 + .../tests/subject_management/test_router.py | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 castellum_core/tests/subject_management/test_router.py diff --git a/castellum_core/castellum_core/subject_management/routers.py b/castellum_core/castellum_core/subject_management/routers.py index 98752bfec..d30f64947 100644 --- a/castellum_core/castellum_core/subject_management/routers.py +++ b/castellum_core/castellum_core/subject_management/routers.py @@ -38,3 +38,5 @@ class SubjectManagementRouter: def allow_migrate(self, db, app_label, **hints): if db == APP_LABEL: return app_label == APP_LABEL + elif app_label == APP_LABEL: + return False diff --git a/castellum_core/tests/subject_management/test_router.py b/castellum_core/tests/subject_management/test_router.py new file mode 100644 index 000000000..909103125 --- /dev/null +++ b/castellum_core/tests/subject_management/test_router.py @@ -0,0 +1,48 @@ +import pytest + +from model_mommy import mommy + +from castellum_auth.models import User +from subject_management.models import Subject +from subject_management.routers import APP_LABEL, SubjectManagementRouter + + +@pytest.fixture +def router(): + return SubjectManagementRouter() + + +@pytest.mark.parametrize("model,expected", [ + (Subject, "subject_management"), + (User, None), +]) +def test_db_for_read(router, model, expected): + assert expected == router.db_for_read(model) + + +@pytest.mark.parametrize("model,expected", [ + (Subject, "subject_management"), + (User, None), +]) +def test_db_for_write(router, model, expected): + assert expected == router.db_for_write(model) + + +@pytest.mark.parametrize("obj1,obj2,expected", [ + (mommy.prepare(Subject), mommy.prepare(Subject), True), + (mommy.prepare(Subject), mommy.prepare(User), None), + (mommy.prepare(User), mommy.prepare(Subject), None), + (mommy.prepare(User), mommy.prepare(User), None), +]) +def test_allow_relation(router, obj1, obj2, expected): + assert expected == router.allow_relation(obj1, obj2) + + +@pytest.mark.parametrize("db,app_label,expected", [ + (APP_LABEL, APP_LABEL, True), + ("default", APP_LABEL, False), + (APP_LABEL, "admin", False), + ("default", "admin", None), +]) +def test_allow_migrate(router, db, app_label, expected): + assert expected == router.allow_migrate(db, app_label) -- GitLab From 1b8df138581662265f41c16b7d87ba81410a5f60 Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Mon, 11 Jun 2018 13:26:56 +0200 Subject: [PATCH 14/16] define app config for subject management in installed apps --- castellum_core/castellum_core/subject_management/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/castellum_core/castellum_core/subject_management/__init__.py b/castellum_core/castellum_core/subject_management/__init__.py index e69de29bb..6e59d7160 100644 --- a/castellum_core/castellum_core/subject_management/__init__.py +++ b/castellum_core/castellum_core/subject_management/__init__.py @@ -0,0 +1 @@ +default_app_config = 'subject_management.apps.SubjectManagementConfig' -- GitLab From 2e96c53147e9f0fd9253010c434c5c498d316a8c Mon Sep 17 00:00:00 2001 From: Stefan Bunde Date: Mon, 11 Jun 2018 13:27:35 +0200 Subject: [PATCH 15/16] add migration file for translations --- .../migrations/0002_auto_20180607_1232.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 castellum_core/castellum_core/subject_management/migrations/0002_auto_20180607_1232.py diff --git a/castellum_core/castellum_core/subject_management/migrations/0002_auto_20180607_1232.py b/castellum_core/castellum_core/subject_management/migrations/0002_auto_20180607_1232.py new file mode 100644 index 000000000..24245d02d --- /dev/null +++ b/castellum_core/castellum_core/subject_management/migrations/0002_auto_20180607_1232.py @@ -0,0 +1,94 @@ +# Generated by Django 2.0.4 on 2018-06-07 12:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('subject_management', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='address', + name='additional_information', + field=models.CharField(blank=True, max_length=32, verbose_name='additional information'), + ), + migrations.AlterField( + model_name='address', + name='city', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subject_management.City', verbose_name='City'), + ), + migrations.AlterField( + model_name='address', + name='house_number', + field=models.CharField(max_length=5, verbose_name='house_number'), + ), + migrations.AlterField( + model_name='address', + name='street', + field=models.CharField(max_length=128, verbose_name='street'), + ), + migrations.AlterField( + model_name='address', + name='zip_code', + field=models.CharField(max_length=5, verbose_name='zip code'), + ), + migrations.AlterField( + model_name='city', + name='country', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subject_management.Country', verbose_name='Country'), + ), + migrations.AlterField( + model_name='city', + name='name', + field=models.CharField(max_length=128, verbose_name='name'), + ), + migrations.AlterField( + model_name='country', + name='name', + field=models.CharField(max_length=64, unique=True, verbose_name='name'), + ), + migrations.AlterField( + model_name='subject', + name='address', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='subject_management.Address', verbose_name='Address'), + ), + migrations.AlterField( + model_name='subject', + name='birthday', + field=models.DateField(verbose_name='birthday'), + ), + migrations.AlterField( + model_name='subject', + name='email', + field=models.EmailField(blank=True, max_length=128, verbose_name='email'), + ), + migrations.AlterField( + model_name='subject', + name='first_name', + field=models.CharField(max_length=64, verbose_name='first name'), + ), + migrations.AlterField( + model_name='subject', + name='gender', + field=models.CharField(choices=[('f', 'female'), ('m', 'male'), ('*', 'diverse')], default='f', max_length=1, verbose_name='gender'), + ), + migrations.AlterField( + model_name='subject', + name='last_name', + field=models.CharField(max_length=64, verbose_name='last name'), + ), + migrations.AlterField( + model_name='subject', + name='phone_number', + field=models.CharField(blank=True, max_length=32, verbose_name='phone number'), + ), + migrations.AlterField( + model_name='subject', + name='phone_number_alternative', + field=models.CharField(blank=True, max_length=32, verbose_name='phone number alternative'), + ), + ] -- GitLab From 2b2b1ccec51f8a609de241c12296a4630e39e3e5 Mon Sep 17 00:00:00 2001 From: Tobias Bengfort Date: Mon, 11 Jun 2018 16:41:59 +0200 Subject: [PATCH 16/16] restore previous settings structure --- .../castellum_core/settings/__init__.py | 2 +- .../castellum_core/settings/default.py | 10 ++++------ .../settings/{databases.py => development.py} | 13 ++++++++----- 3 files changed, 13 insertions(+), 12 deletions(-) rename castellum_core/castellum_core/castellum_core/settings/{databases.py => development.py} (62%) diff --git a/castellum_core/castellum_core/castellum_core/settings/__init__.py b/castellum_core/castellum_core/castellum_core/settings/__init__.py index 4a32fccbc..79be19769 100644 --- a/castellum_core/castellum_core/castellum_core/settings/__init__.py +++ b/castellum_core/castellum_core/castellum_core/settings/__init__.py @@ -1 +1 @@ -from .default import * +from .development import * diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings/default.py index 2e3445d43..461a27377 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings/default.py @@ -3,15 +3,9 @@ import os from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from .databases import DATABASE_ROUTERS, DATABASES - BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -SECRET_KEY = os.environ.get("SECRET_KEY", os.urandom(32)) - -DEBUG = "on" == os.environ.get("DEBUG", "on") - ALLOWED_HOSTS = [] @@ -68,6 +62,10 @@ TEMPLATES = [ WSGI_APPLICATION = 'castellum_core.wsgi.application' +DATABASE_ROUTERS = [ + 'subject_management.routers.SubjectManagementRouter', +] + # Password validation AUTH_PASSWORD_VALIDATORS = [ diff --git a/castellum_core/castellum_core/castellum_core/settings/databases.py b/castellum_core/castellum_core/castellum_core/settings/development.py similarity index 62% rename from castellum_core/castellum_core/castellum_core/settings/databases.py rename to castellum_core/castellum_core/castellum_core/settings/development.py index 516524637..c4579e987 100644 --- a/castellum_core/castellum_core/castellum_core/settings/databases.py +++ b/castellum_core/castellum_core/castellum_core/settings/development.py @@ -1,11 +1,12 @@ -import os +from .default import * -BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +SECRET_KEY = 'i#$kwk(s24ysn+l%+c!*z9u4+45)oex!-s#!bux#wf2pv2cc0d' -DATABASE_ROUTERS = [ - 'subject_management.routers.SubjectManagementRouter', -] +DEBUG = True + + +# Database DATABASES = { 'default': { @@ -17,3 +18,5 @@ DATABASES = { 'NAME': os.path.join(BASE_DIR, 'subject_management.sqlite3'), }, } + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' -- GitLab