From c776e24fb13179214430c5f50c3df7e21eb6fdae Mon Sep 17 00:00:00 2001 From: Florent Chehab Date: Sun, 9 Sep 2018 15:22:34 +0200 Subject: [PATCH 1/4] Bug corrected and importance level added --- backend/migrations/0002_auto_20180909_1455.py | 48 +++++++++++++++++++ backend/models/module/basicModule.py | 11 +++++ backend/models/module/scholarship.py | 1 + .../university/universitySemestersDates.py | 2 + 4 files changed, 62 insertions(+) create mode 100644 backend/migrations/0002_auto_20180909_1455.py diff --git a/backend/migrations/0002_auto_20180909_1455.py b/backend/migrations/0002_auto_20180909_1455.py new file mode 100644 index 00000000..99c82c46 --- /dev/null +++ b/backend/migrations/0002_auto_20180909_1455.py @@ -0,0 +1,48 @@ +# Generated by Django 2.0.3 on 2018-09-09 12:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('backend', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='campus', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='countrydri', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='countryscholarship', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='universitydri', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='universityinfo', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='universityscholarship', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='universitysemestersdates', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + ] diff --git a/backend/models/module/basicModule.py b/backend/models/module/basicModule.py index efa725cf..524dcdea 100644 --- a/backend/models/module/basicModule.py +++ b/backend/models/module/basicModule.py @@ -4,11 +4,22 @@ from backend.models.tools import JSONField from backend.models.tag.tagged_item_validation import validate_content_against_config from backend.models.tag.tags_config import USEFULL_LINKS_CONFIG +IMPORTANCE_LEVEL = ( + ('-', 'normal'), + ('+', 'important'), + ('++', 'IMPORTANT') +) + class BasicModule(MyModelVersionned): comment = models.TextField(blank=True) usefull_links = JSONField(default=list) + importance_level = models.CharField( + max_length=2, + choices=IMPORTANCE_LEVEL, + default='-', + ) class Meta: abstract = True diff --git a/backend/models/module/scholarship.py b/backend/models/module/scholarship.py index 72bdc4c3..5e5b3eb9 100644 --- a/backend/models/module/scholarship.py +++ b/backend/models/module/scholarship.py @@ -28,6 +28,7 @@ class Scholarship(BasicModule): class ScholarshipSerializer(BasicModuleSerializer): def my_validate(self, attrs): + attrs = super(ScholarshipSerializer, self).my_validate(attrs) if attrs['amount_max'] < attrs['amount_min']: raise serializers.ValidationError( "Amount_max should be greater or equal than amount_min") diff --git a/backend/models/university/universitySemestersDates.py b/backend/models/university/universitySemestersDates.py index c6ebebf2..b66309d4 100644 --- a/backend/models/university/universitySemestersDates.py +++ b/backend/models/university/universitySemestersDates.py @@ -29,6 +29,8 @@ class UniversitySemestersDates(BasicModule): class UniversitySemestersDatesSerializer(BasicModuleSerializer): def my_validate(self, attrs): + attrs = super(UniversitySemestersDatesSerializer, self).my_validate(attrs) + s_b, s_e = attrs['spring_begin'], attrs['spring_end'] a_b, a_e = attrs['autumn_begin'], attrs['autumn_end'] -- GitLab From 42992788366b86849ba239770e76e02b8809cf6b Mon Sep 17 00:00:00 2001 From: Florent Chehab Date: Sun, 9 Sep 2018 16:06:31 +0200 Subject: [PATCH 2/4] Backend completely reorganized to limit cyclic imports --- .../loading_scripts/loadCountries.py | 2 +- .../loading_scripts/loadCurrencies.py | 2 +- .../loading_scripts/loadUniversities.py | 6 +- backend/migrations/0003_auto_20180909_1547.py | 74 +++++++++++++++++++ backend/models/basic_module/__init__.py | 1 + .../{module => basic_module}/basicModule.py | 4 +- backend/models/campus/__init__.py | 2 + .../models/{university => campus}/campus.py | 4 +- .../campusTaggedItem.py | 2 +- backend/models/city/__init__.py | 2 + backend/models/{location => city}/city.py | 2 +- .../{location => city}/cityTaggedItem.py | 2 +- .../models/{location => country}/__init__.py | 5 -- .../models/{location => country}/country.py | 0 .../{location => country}/countryDri.py | 10 +-- .../countryScholarship.py | 4 +- .../countryTaggedItem.py | 2 +- backend/models/currency/__init__.py | 1 + .../models/{location => currency}/currency.py | 0 backend/models/module/__init__.py | 3 - backend/models/module/driRestrictedModule.py | 16 ---- backend/models/scholarship/__init__.py | 1 + .../{module => scholarship}/scholarship.py | 4 +- backend/models/tag/__init__.py | 1 - backend/models/tag/taggedItem.py | 10 +-- backend/models/university/__init__.py | 3 - backend/models/university/university.py | 2 +- backend/models/university/universityDri.py | 8 +- backend/models/university/universityInfo.py | 4 +- .../models/university/universityModulesAPI.py | 2 +- .../university/universityScholarship.py | 2 +- .../university/universitySemestersDates.py | 2 +- backend/tests/test_scholarhip_validate.py | 18 ++--- backend/tests/test_semester_dates_validate.py | 5 +- backend/tests/test_validation_url.py | 2 +- backend/validators/__init__.py | 0 .../validators => validators/tag}/__init__.py | 1 + backend/{models => validators}/tag/checks.py | 0 .../tag/tagged_item_validation.py | 7 +- .../tag/tags_config/__init__.py | 2 +- .../tag/tags_config/photos.py | 2 +- .../tag/tags_config/usefull_links.py | 0 .../tag/validators => validators/tag}/text.py | 0 .../tag/validators => validators/tag}/url.py | 0 general/api/api_config.yml | 20 ++--- general/settings.py | 1 + requirements.txt | 3 +- 47 files changed, 153 insertions(+), 91 deletions(-) create mode 100644 backend/migrations/0003_auto_20180909_1547.py create mode 100644 backend/models/basic_module/__init__.py rename backend/models/{module => basic_module}/basicModule.py (87%) create mode 100644 backend/models/campus/__init__.py rename backend/models/{university => campus}/campus.py (93%) rename backend/models/{university => campus}/campusTaggedItem.py (95%) create mode 100644 backend/models/city/__init__.py rename backend/models/{location => city}/city.py (95%) rename backend/models/{location => city}/cityTaggedItem.py (95%) rename backend/models/{location => country}/__init__.py (58%) rename backend/models/{location => country}/country.py (100%) rename backend/models/{location => country}/countryDri.py (64%) rename backend/models/{location => country}/countryScholarship.py (84%) rename backend/models/{location => country}/countryTaggedItem.py (95%) create mode 100644 backend/models/currency/__init__.py rename backend/models/{location => currency}/currency.py (100%) delete mode 100644 backend/models/module/__init__.py delete mode 100644 backend/models/module/driRestrictedModule.py create mode 100644 backend/models/scholarship/__init__.py rename backend/models/{module => scholarship}/scholarship.py (88%) create mode 100644 backend/validators/__init__.py rename backend/{models/tag/validators => validators/tag}/__init__.py (52%) rename backend/{models => validators}/tag/checks.py (100%) rename backend/{models => validators}/tag/tagged_item_validation.py (95%) rename backend/{models => validators}/tag/tags_config/__init__.py (54%) rename backend/{models => validators}/tag/tags_config/photos.py (97%) rename backend/{models => validators}/tag/tags_config/usefull_links.py (100%) rename backend/{models/tag/validators => validators/tag}/text.py (100%) rename backend/{models/tag/validators => validators/tag}/url.py (100%) diff --git a/backend/load_data/loading_scripts/loadCountries.py b/backend/load_data/loading_scripts/loadCountries.py index f7b9d468..9e22f8fb 100644 --- a/backend/load_data/loading_scripts/loadCountries.py +++ b/backend/load_data/loading_scripts/loadCountries.py @@ -1,4 +1,4 @@ -from backend.models.location import Country +from backend.models.country import Country import os import pandas as pd from .loadGeneric import LoadGeneric diff --git a/backend/load_data/loading_scripts/loadCurrencies.py b/backend/load_data/loading_scripts/loadCurrencies.py index 392b7cec..ae70fc69 100644 --- a/backend/load_data/loading_scripts/loadCurrencies.py +++ b/backend/load_data/loading_scripts/loadCurrencies.py @@ -1,4 +1,4 @@ -from backend.models.location import Currency +from backend.models.currency import Currency import os import csv from .loadGeneric import LoadGeneric diff --git a/backend/load_data/loading_scripts/loadUniversities.py b/backend/load_data/loading_scripts/loadUniversities.py index 627fbb1c..0d99eb3b 100644 --- a/backend/load_data/loading_scripts/loadUniversities.py +++ b/backend/load_data/loading_scripts/loadUniversities.py @@ -1,5 +1,7 @@ -from backend.models.location import City, Country -from backend.models.university import University, Campus +from backend.models.country import Country +from backend.models.city import City +from backend.models.university import University +from backend.models.campus import Campus import os import pandas as pd diff --git a/backend/migrations/0003_auto_20180909_1547.py b/backend/migrations/0003_auto_20180909_1547.py new file mode 100644 index 00000000..944681df --- /dev/null +++ b/backend/migrations/0003_auto_20180909_1547.py @@ -0,0 +1,74 @@ +# Generated by Django 2.0.3 on 2018-09-09 13:47 + +import backend.models.tools.jSONField +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('backend', '0002_auto_20180909_1455'), + ] + + operations = [ + migrations.AddField( + model_name='campustaggeditem', + name='comment', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='campustaggeditem', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='campustaggeditem', + name='usefull_links', + field=backend.models.tools.jSONField.JSONField(default=list), + ), + migrations.AddField( + model_name='citytaggeditem', + name='comment', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='citytaggeditem', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='citytaggeditem', + name='usefull_links', + field=backend.models.tools.jSONField.JSONField(default=list), + ), + migrations.AddField( + model_name='countrytaggeditem', + name='comment', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='countrytaggeditem', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='countrytaggeditem', + name='usefull_links', + field=backend.models.tools.jSONField.JSONField(default=list), + ), + migrations.AddField( + model_name='universitytaggeditem', + name='comment', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='universitytaggeditem', + name='importance_level', + field=models.CharField(choices=[('-', 'normal'), ('+', 'important'), ('++', 'IMPORTANT')], default='-', max_length=2), + ), + migrations.AddField( + model_name='universitytaggeditem', + name='usefull_links', + field=backend.models.tools.jSONField.JSONField(default=list), + ), + ] diff --git a/backend/models/basic_module/__init__.py b/backend/models/basic_module/__init__.py new file mode 100644 index 00000000..e95855c1 --- /dev/null +++ b/backend/models/basic_module/__init__.py @@ -0,0 +1 @@ +from .basicModule import BasicModule, BasicModuleSerializer, BasicModuleViewSet # noqa: F401 diff --git a/backend/models/module/basicModule.py b/backend/models/basic_module/basicModule.py similarity index 87% rename from backend/models/module/basicModule.py rename to backend/models/basic_module/basicModule.py index 524dcdea..e370c2b9 100644 --- a/backend/models/module/basicModule.py +++ b/backend/models/basic_module/basicModule.py @@ -1,8 +1,8 @@ from django.db import models from backend.models.my_model import MyModelVersionned, MyModelVersionnedSerializer, MyModelVersionnedViewSet from backend.models.tools import JSONField -from backend.models.tag.tagged_item_validation import validate_content_against_config -from backend.models.tag.tags_config import USEFULL_LINKS_CONFIG +from backend.validators.tag import validate_content_against_config +from backend.validators.tag.tags_config import USEFULL_LINKS_CONFIG IMPORTANCE_LEVEL = ( ('-', 'normal'), diff --git a/backend/models/campus/__init__.py b/backend/models/campus/__init__.py new file mode 100644 index 00000000..1386dc50 --- /dev/null +++ b/backend/models/campus/__init__.py @@ -0,0 +1,2 @@ +from .campus import Campus, CampusViewSet, CampusSerializer, MainCampusViewSet # noqa: F401 +from .campusTaggedItem import CampusTaggedItem, CampusTaggedItemSerializer, CampusTaggedItemViewSet # noqa: F401 diff --git a/backend/models/university/campus.py b/backend/models/campus/campus.py similarity index 93% rename from backend/models/university/campus.py rename to backend/models/campus/campus.py index 9daf759b..ff45648c 100644 --- a/backend/models/university/campus.py +++ b/backend/models/campus/campus.py @@ -1,6 +1,6 @@ from django.db import models -from backend.models.module import BasicModule, BasicModuleSerializer, BasicModuleViewSet -from backend.models.location import City +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet +from backend.models.city import City from backend.models.university import University from django.core.validators import MinValueValidator, MaxValueValidator from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/university/campusTaggedItem.py b/backend/models/campus/campusTaggedItem.py similarity index 95% rename from backend/models/university/campusTaggedItem.py rename to backend/models/campus/campusTaggedItem.py index 6c984c25..3c772a1c 100644 --- a/backend/models/university/campusTaggedItem.py +++ b/backend/models/campus/campusTaggedItem.py @@ -1,5 +1,5 @@ from django.db import models -from backend.models.university import Campus +from backend.models.campus import Campus from backend.models.tag import TaggedItem, TaggedItemSerializer, TaggedItemViewSet from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/city/__init__.py b/backend/models/city/__init__.py new file mode 100644 index 00000000..5a2cb1c2 --- /dev/null +++ b/backend/models/city/__init__.py @@ -0,0 +1,2 @@ +from .city import City, CitySerializer, CityViewSet # noqa: F401 +from .cityTaggedItem import CityTaggedItem, CityTaggedItemSerializer, CityTaggedItemViewSet # noqa: F401 diff --git a/backend/models/location/city.py b/backend/models/city/city.py similarity index 95% rename from backend/models/location/city.py rename to backend/models/city/city.py index e662a928..963c51d7 100644 --- a/backend/models/location/city.py +++ b/backend/models/city/city.py @@ -1,5 +1,5 @@ from django.db import models -from backend.models.location import Country +from backend.models.country import Country from backend.models.my_model import MyModel, MyModelSerializer, MyModelVersionnedViewSet from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/location/cityTaggedItem.py b/backend/models/city/cityTaggedItem.py similarity index 95% rename from backend/models/location/cityTaggedItem.py rename to backend/models/city/cityTaggedItem.py index 573d55aa..6e1c7ada 100644 --- a/backend/models/location/cityTaggedItem.py +++ b/backend/models/city/cityTaggedItem.py @@ -1,6 +1,6 @@ from django.db import models from backend.models.tag import TaggedItem, TaggedItemSerializer, TaggedItemViewSet -from backend.models.location import City +from backend.models.city import City from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/location/__init__.py b/backend/models/country/__init__.py similarity index 58% rename from backend/models/location/__init__.py rename to backend/models/country/__init__.py index f1b0d81c..bef7faa1 100644 --- a/backend/models/location/__init__.py +++ b/backend/models/country/__init__.py @@ -1,9 +1,4 @@ -from .currency import Currency, CurrencyViewSet, CurrencySerializer # noqa: F401 - from .country import Country, CountrySerializer, CountryViewSet # noqa: F401 from .countryScholarship import CountryScholarship, CountryScholarshipViewSet # noqa: F401 from .countryDri import CountryDri, CountryDriViewSet # noqa: F401 from .countryTaggedItem import CountryTaggedItem, CountryTaggedItemSerializer, CountryTaggedItemViewSet # noqa: F401 - -from .city import City, CitySerializer, CityViewSet # noqa: F401 -from .cityTaggedItem import CityTaggedItem, CityTaggedItemSerializer, CityTaggedItemViewSet # noqa: F401 diff --git a/backend/models/location/country.py b/backend/models/country/country.py similarity index 100% rename from backend/models/location/country.py rename to backend/models/country/country.py diff --git a/backend/models/location/countryDri.py b/backend/models/country/countryDri.py similarity index 64% rename from backend/models/location/countryDri.py rename to backend/models/country/countryDri.py index 81a7baa5..d3ff27f6 100644 --- a/backend/models/location/countryDri.py +++ b/backend/models/country/countryDri.py @@ -1,10 +1,10 @@ from django.db import models -from backend.models.location import Country -from backend.models.module import DriRestrictedModule, DriRestrictedModuleSerializer, DriRestrictedModuleViewSet +from backend.models.country import Country +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet from backend.utils import get_model_config, get_viewset_permissions -class CountryDri(DriRestrictedModule): +class CountryDri(BasicModule): model_config = get_model_config("CountryDri") country = models.ManyToManyField( Country, related_name="country_dri") @@ -14,14 +14,14 @@ class CountryDri(DriRestrictedModule): return CountryDriSerializer -class CountryDriSerializer(DriRestrictedModuleSerializer): +class CountryDriSerializer(BasicModuleSerializer): class Meta: model = CountryDri fields = '__all__' -class CountryDriViewSet(DriRestrictedModuleViewSet): +class CountryDriViewSet(BasicModuleViewSet): permission_classes = get_viewset_permissions("CountryDriViewSet") queryset = CountryDri.objects.all() # pylint: disable=E1101 serializer_class = CountryDriSerializer diff --git a/backend/models/location/countryScholarship.py b/backend/models/country/countryScholarship.py similarity index 84% rename from backend/models/location/countryScholarship.py rename to backend/models/country/countryScholarship.py index b4439be2..74f56827 100644 --- a/backend/models/location/countryScholarship.py +++ b/backend/models/country/countryScholarship.py @@ -1,6 +1,6 @@ from django.db import models -from backend.models.location import Country -from backend.models.module import Scholarship, ScholarshipSerializer, ScholarshipViewSet +from backend.models.country import Country +from backend.models.scholarship import Scholarship, ScholarshipSerializer, ScholarshipViewSet from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/location/countryTaggedItem.py b/backend/models/country/countryTaggedItem.py similarity index 95% rename from backend/models/location/countryTaggedItem.py rename to backend/models/country/countryTaggedItem.py index c837138f..39aa861c 100644 --- a/backend/models/location/countryTaggedItem.py +++ b/backend/models/country/countryTaggedItem.py @@ -1,6 +1,6 @@ from django.db import models from backend.models.tag import TaggedItem, TaggedItemSerializer, TaggedItemViewSet -from backend.models.location import Country +from backend.models.country import Country from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/currency/__init__.py b/backend/models/currency/__init__.py new file mode 100644 index 00000000..b686584e --- /dev/null +++ b/backend/models/currency/__init__.py @@ -0,0 +1 @@ +from .currency import Currency, CurrencyViewSet, CurrencySerializer # noqa: F401 diff --git a/backend/models/location/currency.py b/backend/models/currency/currency.py similarity index 100% rename from backend/models/location/currency.py rename to backend/models/currency/currency.py diff --git a/backend/models/module/__init__.py b/backend/models/module/__init__.py deleted file mode 100644 index 4f89a0ec..00000000 --- a/backend/models/module/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .basicModule import BasicModule, BasicModuleSerializer, BasicModuleViewSet # noqa: F401 -from .scholarship import Scholarship, ScholarshipSerializer, ScholarshipViewSet # noqa: F401 -from .driRestrictedModule import DriRestrictedModule, DriRestrictedModuleSerializer, DriRestrictedModuleViewSet # noqa: F401 diff --git a/backend/models/module/driRestrictedModule.py b/backend/models/module/driRestrictedModule.py deleted file mode 100644 index 9fd29a3b..00000000 --- a/backend/models/module/driRestrictedModule.py +++ /dev/null @@ -1,16 +0,0 @@ -from backend.models.module import BasicModule, BasicModuleSerializer, BasicModuleViewSet - - -class DriRestrictedModule(BasicModule): - - class Meta: - abstract = True - - -class DriRestrictedModuleSerializer(BasicModuleSerializer): - class Meta: - model = DriRestrictedModule - - -class DriRestrictedModuleViewSet(BasicModuleViewSet): - serializer_class = DriRestrictedModuleSerializer diff --git a/backend/models/scholarship/__init__.py b/backend/models/scholarship/__init__.py new file mode 100644 index 00000000..8fa452d2 --- /dev/null +++ b/backend/models/scholarship/__init__.py @@ -0,0 +1 @@ +from .scholarship import Scholarship, ScholarshipSerializer, ScholarshipViewSet # noqa: F401 diff --git a/backend/models/module/scholarship.py b/backend/models/scholarship/scholarship.py similarity index 88% rename from backend/models/module/scholarship.py rename to backend/models/scholarship/scholarship.py index 5e5b3eb9..c7aacba9 100644 --- a/backend/models/module/scholarship.py +++ b/backend/models/scholarship/scholarship.py @@ -1,6 +1,6 @@ from django.db import models -from backend.models.module import BasicModule, BasicModuleSerializer, BasicModuleViewSet -from backend.models.location import Currency +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet +from backend.models.currency import Currency from rest_framework import serializers from django.core.validators import MinValueValidator diff --git a/backend/models/tag/__init__.py b/backend/models/tag/__init__.py index cf2e066f..c6976c63 100644 --- a/backend/models/tag/__init__.py +++ b/backend/models/tag/__init__.py @@ -1,3 +1,2 @@ from .tag import Tag, TagSerializer, TagViewSet # noqa: F401 from .taggedItem import TaggedItem, TaggedItemSerializer, TaggedItemViewSet # noqa: F401 -from .tagged_item_validation import validate_content_against_config # noqa: F401 diff --git a/backend/models/tag/taggedItem.py b/backend/models/tag/taggedItem.py index e231252b..6993e1ba 100644 --- a/backend/models/tag/taggedItem.py +++ b/backend/models/tag/taggedItem.py @@ -1,11 +1,11 @@ from django.db import models -from backend.models.my_model import MyModelVersionned, MyModelVersionnedSerializer, MyModelVersionnedViewSet +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet from .tag import Tag -from .tagged_item_validation import tagged_item_validation +from backend.validators.tag import tagged_item_validation from backend.models.tools import JSONField -class TaggedItem(MyModelVersionned): +class TaggedItem(BasicModule): tag = models.ForeignKey(Tag, related_name='+', on_delete=models.PROTECT) custom_content = JSONField(default=dict) @@ -13,13 +13,13 @@ class TaggedItem(MyModelVersionned): abstract = True -class TaggedItemSerializer(MyModelVersionnedSerializer): +class TaggedItemSerializer(BasicModuleSerializer): def my_validate(self, attrs): tagged_item_validation(attrs) return attrs -class TaggedItemViewSet(MyModelVersionnedViewSet): +class TaggedItemViewSet(BasicModuleViewSet): def extend_queryset(self): return self.mymodel_queryset.prefetch_related('tag') diff --git a/backend/models/university/__init__.py b/backend/models/university/__init__.py index 67c76c63..3d893295 100644 --- a/backend/models/university/__init__.py +++ b/backend/models/university/__init__.py @@ -6,6 +6,3 @@ from .universityInfo import UniversityInfo, UniversityInfoSerializer, University from .universitySemestersDates import UniversitySemestersDates, UniversitySemestersDatesSerializer, UniversitySemestersDatesViewSet # noqa: F401 from .universityModulesAPI import UniversityModulesViewSet # noqa: F401 from .universityTaggedItem import UniversityTaggedItem, UniversityTaggedItemSerializer, UniversityTaggedItemViewSet # noqa: F401 - -from .campus import Campus, CampusViewSet, CampusSerializer, MainCampusViewSet # noqa: F401 -from .campusTaggedItem import CampusTaggedItem, CampusTaggedItemSerializer, CampusTaggedItemViewSet # noqa: F401 diff --git a/backend/models/university/university.py b/backend/models/university/university.py index d17c8b80..a3389f95 100644 --- a/backend/models/university/university.py +++ b/backend/models/university/university.py @@ -3,7 +3,7 @@ from backend.models.my_model import MyModel from backend.utils import get_model_config from django.core.exceptions import ValidationError from rest_framework.validators import ValidationError as RFValidationError -from backend.models.tag.validators.url import validate_extension +from backend.validators.tag.url import validate_extension from django.conf import settings from backend.models.my_model import MyModelSerializer, MyModelViewSet from backend.utils import get_viewset_permissions diff --git a/backend/models/university/universityDri.py b/backend/models/university/universityDri.py index 743355c8..da8e0a4a 100644 --- a/backend/models/university/universityDri.py +++ b/backend/models/university/universityDri.py @@ -1,10 +1,10 @@ from django.db import models from backend.models.university import University -from backend.models.module import DriRestrictedModule, DriRestrictedModuleSerializer, DriRestrictedModuleViewSet +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet from backend.utils import get_model_config, get_viewset_permissions -class UniversityDri(DriRestrictedModule): +class UniversityDri(BasicModule): model_config = get_model_config("UniversityDri") university = models.ManyToManyField( University, related_name="university_dri") @@ -14,14 +14,14 @@ class UniversityDri(DriRestrictedModule): return UniversityDriSerializer -class UniversityDriSerializer(DriRestrictedModuleSerializer): +class UniversityDriSerializer(BasicModuleSerializer): class Meta: model = UniversityDri fields = '__all__' -class UniversityDriViewSet(DriRestrictedModuleViewSet): +class UniversityDriViewSet(BasicModuleViewSet): permission_classes = get_viewset_permissions("UniversityDriViewSet") queryset = UniversityDri.objects.all() # pylint: disable=E1101 serializer_class = UniversityDriSerializer diff --git a/backend/models/university/universityInfo.py b/backend/models/university/universityInfo.py index 71abb9a0..65b561bf 100644 --- a/backend/models/university/universityInfo.py +++ b/backend/models/university/universityInfo.py @@ -1,7 +1,7 @@ from django.db import models -from backend.models.module import BasicModule, BasicModuleSerializer, BasicModuleViewSet +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet from backend.models.university import University -from backend.models.location import Currency +from backend.models.currency import Currency from django.core.validators import MinValueValidator from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/university/universityModulesAPI.py b/backend/models/university/universityModulesAPI.py index a1311446..5fe4d963 100644 --- a/backend/models/university/universityModulesAPI.py +++ b/backend/models/university/universityModulesAPI.py @@ -1,5 +1,5 @@ from backend.models.university import University -from backend.models.university.campus import CampusSerializer +from backend.models.campus import CampusSerializer from backend.models.university import UniversityDriSerializer from backend.models.my_model import MyModelSerializer, MyModelViewSet diff --git a/backend/models/university/universityScholarship.py b/backend/models/university/universityScholarship.py index 7dda068f..7f43b457 100644 --- a/backend/models/university/universityScholarship.py +++ b/backend/models/university/universityScholarship.py @@ -1,6 +1,6 @@ from django.db import models from backend.models.university import University -from backend.models.module import Scholarship, ScholarshipSerializer, ScholarshipViewSet +from backend.models.scholarship import Scholarship, ScholarshipSerializer, ScholarshipViewSet from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/models/university/universitySemestersDates.py b/backend/models/university/universitySemestersDates.py index b66309d4..ce2024df 100644 --- a/backend/models/university/universitySemestersDates.py +++ b/backend/models/university/universitySemestersDates.py @@ -1,5 +1,5 @@ from django.db import models -from backend.models.module import BasicModule, BasicModuleSerializer, BasicModuleViewSet +from backend.models.basic_module import BasicModule, BasicModuleSerializer, BasicModuleViewSet from backend.models.university import University from rest_framework import serializers from backend.utils import get_model_config, get_viewset_permissions diff --git a/backend/tests/test_scholarhip_validate.py b/backend/tests/test_scholarhip_validate.py index b91ef84a..0901a314 100644 --- a/backend/tests/test_scholarhip_validate.py +++ b/backend/tests/test_scholarhip_validate.py @@ -1,5 +1,5 @@ from django.test import TestCase -from backend.models.module.scholarship import ScholarshipSerializer +from backend.models.scholarship import ScholarshipSerializer import pytest from rest_framework.validators import ValidationError @@ -8,15 +8,15 @@ class ScholarshipTestCase(TestCase): def test_scholarhip_validation(self): ser = ScholarshipSerializer() + attrs = { + 'usefull_links': [], + 'comment': '' + } with pytest.raises(ValidationError): - attrs = { - 'amount_max': 100, - 'amount_min': 200 - } + attrs['amount_min'] = 200 + attrs['amount_max'] = 100 ser.my_validate(attrs) - attrs = { - 'amount_max': 200, - 'amount_min': 100 - } + attrs['amount_min'] = 100 + attrs['amount_max'] = 200 ser.my_validate(attrs) diff --git a/backend/tests/test_semester_dates_validate.py b/backend/tests/test_semester_dates_validate.py index 9d382227..b52a9a39 100644 --- a/backend/tests/test_semester_dates_validate.py +++ b/backend/tests/test_semester_dates_validate.py @@ -11,7 +11,10 @@ class SemesterDatesTestCase(TestCase): def test_validation(self): def build(l): - return {sem: val for sem, val in zip(semesters, l)} + tmp = {sem: val for sem, val in zip(semesters, l)} + tmp['comment'] = "" + tmp['usefull_links'] = [] + return tmp def _test_attrs_error(attrs): with pytest.raises(ValidationError): diff --git a/backend/tests/test_validation_url.py b/backend/tests/test_validation_url.py index 21cede96..3c6d8817 100644 --- a/backend/tests/test_validation_url.py +++ b/backend/tests/test_validation_url.py @@ -2,7 +2,7 @@ from django.test import TestCase import pytest from rest_framework.validators import ValidationError as RFValidationError from django.core.validators import ValidationError as DJValidationError -from backend.models.tag.validators.url import validate_extension, validate_url +from backend.validators.tag.url import validate_extension, validate_url class ValidationUrlTestCase(TestCase): diff --git a/backend/validators/__init__.py b/backend/validators/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/models/tag/validators/__init__.py b/backend/validators/tag/__init__.py similarity index 52% rename from backend/models/tag/validators/__init__.py rename to backend/validators/tag/__init__.py index 79010c21..954ca606 100644 --- a/backend/models/tag/validators/__init__.py +++ b/backend/validators/tag/__init__.py @@ -1,2 +1,3 @@ from .url import validate_url # noqa: F401 from .text import validate_text # noqa: F401 +from .tagged_item_validation import validate_content_against_config # noqa: F401 diff --git a/backend/models/tag/checks.py b/backend/validators/tag/checks.py similarity index 100% rename from backend/models/tag/checks.py rename to backend/validators/tag/checks.py diff --git a/backend/models/tag/tagged_item_validation.py b/backend/validators/tag/tagged_item_validation.py similarity index 95% rename from backend/models/tag/tagged_item_validation.py rename to backend/validators/tag/tagged_item_validation.py index 0babe521..023e3abb 100644 --- a/backend/models/tag/tagged_item_validation.py +++ b/backend/validators/tag/tagged_item_validation.py @@ -1,7 +1,8 @@ from .checks import check_required -from .validators import validate_url, validate_text +from .url import validate_url +from .text import validate_text from rest_framework.validators import ValidationError -from .tags_config import PHOTOS_TAG_GONFIG +from .tags_config import PHOTOS_TAG_CONFIG from .tags_config import USEFULL_LINKS_CONFIG @@ -29,7 +30,7 @@ def validate_content_against_config(config, content): elif field_type == 'text': validate_text(field_config, field_submitted) elif field_type == 'photos': - validate_content_against_config({"photos": PHOTOS_TAG_GONFIG}, { + validate_content_against_config({"photos": PHOTOS_TAG_CONFIG}, { "photos": field_submitted}) elif field_type == 'usefull_links': validate_content_against_config({"ul": USEFULL_LINKS_CONFIG}, { diff --git a/backend/models/tag/tags_config/__init__.py b/backend/validators/tag/tags_config/__init__.py similarity index 54% rename from backend/models/tag/tags_config/__init__.py rename to backend/validators/tag/tags_config/__init__.py index d859e5e4..df2fc2cf 100644 --- a/backend/models/tag/tags_config/__init__.py +++ b/backend/validators/tag/tags_config/__init__.py @@ -1,2 +1,2 @@ -from .photos import PHOTOS_TAG_GONFIG # noqa: F401 +from .photos import PHOTOS_TAG_CONFIG # noqa: F401 from .usefull_links import USEFULL_LINKS_CONFIG # noqa: F401 diff --git a/backend/models/tag/tags_config/photos.py b/backend/validators/tag/tags_config/photos.py similarity index 97% rename from backend/models/tag/tags_config/photos.py rename to backend/validators/tag/tags_config/photos.py index b80d1881..57e3648a 100644 --- a/backend/models/tag/tags_config/photos.py +++ b/backend/validators/tag/tags_config/photos.py @@ -1,6 +1,6 @@ from django.conf import settings -PHOTOS_TAG_GONFIG = { +PHOTOS_TAG_CONFIG = { "type": "array", "required": True, "content": { diff --git a/backend/models/tag/tags_config/usefull_links.py b/backend/validators/tag/tags_config/usefull_links.py similarity index 100% rename from backend/models/tag/tags_config/usefull_links.py rename to backend/validators/tag/tags_config/usefull_links.py diff --git a/backend/models/tag/validators/text.py b/backend/validators/tag/text.py similarity index 100% rename from backend/models/tag/validators/text.py rename to backend/validators/tag/text.py diff --git a/backend/models/tag/validators/url.py b/backend/validators/tag/url.py similarity index 100% rename from backend/models/tag/validators/url.py rename to backend/validators/tag/url.py diff --git a/general/api/api_config.yml b/general/api/api_config.yml index 59757568..f8629b1c 100644 --- a/general/api/api_config.yml +++ b/general/api/api_config.yml @@ -38,13 +38,13 @@ - model: Country viewset: CountryViewSet - import_location: location + import_location: country api_end_point: countries viewset_permission: IsStaffOrReadOnly - model: City viewset: CityViewSet - import_location: location + import_location: city api_end_point: cities moderation_level: 2 @@ -56,7 +56,7 @@ - model: Campus viewset: CampusViewSet - import_location: university + import_location: campus api_end_point: campuses versionned: true moderation_level: 2 @@ -80,7 +80,7 @@ - model: Currency viewset: CurrencyViewSet - import_location: location + import_location: currency api_end_point: currencies moderation_level: 2 viewset_permission: IsStaffOrReadOnly @@ -116,19 +116,19 @@ - model: CountryTaggedItem viewset: CountryTaggedItemViewSet - import_location: location + import_location: country api_end_point: countriesTaggedItems versionned: true - model: CountryScholarship viewset: CountryScholarshipViewSet - import_location: location + import_location: country api_end_point: countriesScholarships versionned: true - model: CountryDri viewset: CountryDriViewSet - import_location: location + import_location: country api_end_point: countriesDri viewset_permission: IsDriOrReadOnly versionned: true @@ -137,7 +137,7 @@ - model: CityTaggedItem viewset: CityTaggedItemViewSet - import_location: location + import_location: city api_end_point: citiesTaggedItems versionned: true @@ -185,13 +185,13 @@ - model: CampusTaggedItem viewset: CampusTaggedItemViewSet - import_location: university + import_location: campus api_end_point: campusesTaggedItems versionned: true - model: null viewset: MainCampusViewSet - import_location: university + import_location: campus api_end_point: mainCampuses read_only: true diff --git a/general/settings.py b/general/settings.py index 2102670a..8e258bb9 100644 --- a/general/settings.py +++ b/general/settings.py @@ -34,6 +34,7 @@ INSTALLED_APPS = [ 'rest_framework.authtoken', 'backend', 'frontend', + 'django_extensions', 'debug_toolbar', ] diff --git a/requirements.txt b/requirements.txt index 7762252c..39343f58 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,4 +19,5 @@ pytest-xdist==1.23.0 flake8 django-debug-toolbar==1.9.1 pandas -pyyaml \ No newline at end of file +pyyaml +django-extensions==2.1.2 \ No newline at end of file -- GitLab From c16448c0a5e57849eda25a72af2322943aad6cf3 Mon Sep 17 00:00:00 2001 From: Florent Chehab Date: Sun, 9 Sep 2018 19:38:46 +0200 Subject: [PATCH 3/4] updated uml generation --- Makefile | 4 +-- docs/{UML => }/.gitignore | 0 docs/Makefile | 35 +++++++++++++++++++ docs/UML/Architecture.pu | 9 ----- docs/UML/Makefile | 19 ----------- docs/UML/UserFunctions.pu | 63 ---------------------------------- docs/UML/location.pu | 45 ------------------------- docs/UML/my_model__module.pu | 40 ---------------------- docs/UML/other_core.pu | 44 ------------------------ docs/UML/university.pu | 65 ------------------------------------ docs/architecture.md | 12 +++---- requirements.txt | 2 +- 12 files changed, 44 insertions(+), 294 deletions(-) rename docs/{UML => }/.gitignore (100%) create mode 100644 docs/Makefile delete mode 100644 docs/UML/Architecture.pu delete mode 100644 docs/UML/Makefile delete mode 100644 docs/UML/UserFunctions.pu delete mode 100644 docs/UML/location.pu delete mode 100644 docs/UML/my_model__module.pu delete mode 100644 docs/UML/other_core.pu delete mode 100644 docs/UML/university.pu diff --git a/Makefile b/Makefile index 10d12461..9e42f4e7 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ run_backend: generate_backend docs: - cd docs/UML && $(MAKE) all + cd docs && $(MAKE) all docs_clean: - cd docs/UML && $(MAKE) clean + cd docs && $(MAKE) clean diff --git a/docs/UML/.gitignore b/docs/.gitignore similarity index 100% rename from docs/UML/.gitignore rename to docs/.gitignore diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..ea6f8e8f --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,35 @@ +all: + mkdir -p generated + ../manage.py graph_models backend --disable-fields -g \ + | tail -n +2 > generated/architecture.dot + dot -Tsvg generated/architecture.dot -o generated/architecture.svg + + + ../manage.py graph_models backend --disable-abstract-fields -g -I \ + MyModel,MyModelVersionned,BasicModule,Scholarship,UserRestrictedModule \ + | tail -n +2 > generated/abstract.dot + dot -Tsvg generated/abstract.dot -o generated/abstract.svg + + ../manage.py graph_models backend --disable-abstract-fields -g -I \ + Specialty,Offer,Semester,Department,University \ + | tail -n +2 > generated/core.dot + dot -Tsvg generated/core.dot -o generated/core.svg + + ../manage.py graph_models backend --disable-abstract-fields -g -I \ + University,UniversityScholarship,UniversityInfo,UniversitySemestersDates,UniversityTaggedItems,UniversityDri,Campus,CampusTaggedItems \ + | tail -n +2 > generated/university.dot + dot -Tsvg generated/university.dot -o generated/university.svg + + ../manage.py graph_models backend --disable-abstract-fields -g -I \ + Country,City,CountryTaggedItems,CityTaggedItems,CountryScholarship,CountryDri\ + | tail -n +2 > generated/location.dot + dot -Tsvg generated/location.dot -o generated/location.svg + + ../manage.py graph_models backend --disable-abstract-fields -g -I \ + RecommendationsList,Recommendation,UserData,PreviousDeparture,PreviousDepartureFeedback,Semester,University,Sepcialty\ + | tail -n +2 > generated/user.dot + dot -Tsvg generated/user.dot -o generated/user.svg +.PHONY: clean + +clean: + rm -rf generated/ diff --git a/docs/UML/Architecture.pu b/docs/UML/Architecture.pu deleted file mode 100644 index 01c35646..00000000 --- a/docs/UML/Architecture.pu +++ /dev/null @@ -1,9 +0,0 @@ -@startuml - -!include my_model__module.pu -!include other_core.pu -!include location.pu -!include university.pu -!include UserFunctions.pu - -@enduml diff --git a/docs/UML/Makefile b/docs/UML/Makefile deleted file mode 100644 index d6f019db..00000000 --- a/docs/UML/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -TARGET=\ - generated/Architecture.svg \ - generated/other_core.svg \ - generated/university.svg \ - generated/my_model__module.svg \ - generated/location.svg \ - generated/UserFunctions.svg - - -all: $(TARGET) - -generated/%.svg: %.pu - mkdir -p generated/ - plantuml -tsvg -o $(abspath generated/) $< - -.PHONY: clean - -clean: - rm -rf generated/ diff --git a/docs/UML/UserFunctions.pu b/docs/UML/UserFunctions.pu deleted file mode 100644 index be6a2f47..00000000 --- a/docs/UML/UserFunctions.pu +++ /dev/null @@ -1,63 +0,0 @@ -@startuml - -package UserFunctionalities #lightblue{ - - class UniversityCopy1 as "University" #red - class SpecialtyCopy1 as "Specialty" #red - class UserCopy1 as "User" #red - class SemesterCopy1 as "Semester" #red - - class RecommendationsList{ - + title : string - + public : bool - } - - class Recommendation{ - + order_in_list : integer - + comment : MD - + grade : int in [0,20] - } - - RecommendationsList "1"-right-"*" Recommendation - - UniversityCopy1 "*" -up- "*" RecommendationsList - SpecialtyCopy1 "1..n" -up- "*" RecommendationsList - UserCopy1 "1" -left- "*" RecommendationsList - UserCopy1 "1" -right- "*" Recommendation - note on link #white - User <-> Recommendation - Required to controll access - end note - - class PreviousDeparture{ - + is_anonymous : bool - + courses : JSON - + Utc_departure_id : int - } - - class PreviousDepartureFeedback{ - + adequation_comment : MD - + integration_comment : MD - + adequation_grade : integer - + adequation_grade : integer - + courses_and_courses_feedback : JSON - } - - PreviousDeparture "1" -right- "1" PreviousDepartureFeedback - - PreviousDeparture "*" -left- "1" UserCopy1 - PreviousDeparture "*" -up- "1" SpecialtyCopy1 - PreviousDeparture "*" -up- "1" UniversityCopy1 - PreviousDeparture "*" -up- "1..n" SemesterCopy1 - - class UserData{ - + contact_info : JSON - + contact_info_is_public : bool - + config : JSON - + other_data : JSON - - } - UserData "1"-up-"1" UserCopy1 -} - -@enduml \ No newline at end of file diff --git a/docs/UML/location.pu b/docs/UML/location.pu deleted file mode 100644 index 90a1ac65..00000000 --- a/docs/UML/location.pu +++ /dev/null @@ -1,45 +0,0 @@ -@startuml - -package location{ - class City #white { - + name : string - + local_name : string - + area : string - } - - class Country #white { - # iso_alpha2_code : string{2} - + name : string - + region_code : string{3} - + region_name : string - + sub_region_code : string{3} - + sub_region_name : string - + intermediate_region_code : string{3} - + intermediate_region_name : string - } - - City "*" -left-* Country - - - note "Countries are intially \n hardcoded in the db." as N2 - N2 .up. Country - - abstract class BasicModuleCopyLocation as "BasicModule" #red - class CountryDri - CountryDri -down-|> BasicModuleCopyLocation - - Country "*"-down-"*" CountryDri - - abstract class CountryTaggedItem - abstract class ScholarShipCopyCountry as "Scholarship" #red - - class ScholarshipCountry - - ScholarshipCountry -right-|> ScholarShipCopyCountry - ScholarshipCountry "*" -- "*" Country - CountryTaggedItem "*" -- "*" Country - - CityTaggedItem "*" -- "*" City - class CityTaggedItem -} -@enduml \ No newline at end of file diff --git a/docs/UML/my_model__module.pu b/docs/UML/my_model__module.pu deleted file mode 100644 index 56b40c72..00000000 --- a/docs/UML/my_model__module.pu +++ /dev/null @@ -1,40 +0,0 @@ -@startuml - - -package my_model #lightgrey{ - - abstract class MyModel{ - + moderated_by : user - + moderated_on : date - + updated_by : user - + updated_on : date - } - - abstract class MyModelVersionned { - ---- - get_serializer() - } - - MyModelVersionned -up-|> MyModel -} - -package module #lightgrey{ - - - abstract class BasicModule{ - + comment : string - + usefull_links : JSON \n array of {url,description} - } - - abstract class ScholarShip{ - + type : string - + amount_min : float {currency} - + amount_max : float {currency} - } - - BasicModule -up-|> MyModelVersionned - ScholarShip -up-|> BasicModule -} - - -@enduml \ No newline at end of file diff --git a/docs/UML/other_core.pu b/docs/UML/other_core.pu deleted file mode 100644 index 9fa81aff..00000000 --- a/docs/UML/other_core.pu +++ /dev/null @@ -1,44 +0,0 @@ -@startuml - -package Core { - Class Offer { - + nb_seats_offered : int - } - - Class Semester{ - + code : string {key} - } - - Class Department{ - + code : string - + name : string - + active : bool - } - - Class Specialty { - + code : string - + name : string - + active : bool - } - - Offer "*" -down- "1" Semester - Offer "*" -left- "1..n" Specialty - Specialty "1..n" -left- "1" Department - - note "Initial data inserted in db." as N3 - Semester .. N3 - N3 .. Specialty - N3 .. Department - - - class UsefullLinks #green{ - + content : MD - } - - note right of UsefullLinks: It will be a dynamic page \n on the website - -} -' End of Core block -Offer "*" -right- "1" University - -@enduml \ No newline at end of file diff --git a/docs/UML/university.pu b/docs/UML/university.pu deleted file mode 100644 index 72309f66..00000000 --- a/docs/UML/university.pu +++ /dev/null @@ -1,65 +0,0 @@ -@startuml - -skinparam defaultFontName Inconsolata - - - -package universityP{ - - class University #wheat { - + name : string - + accronyme : string - + logo : image - + website : url - } - - - abstract class UniversityTaggedItem - abstract class ScholarShipCopyUniversity as "Scholarship" #red - - - class SemestersDates{ - + autumn_begin : date - + autumn_end : date - + spring_begin : date - + spring_end : date - } - - class UniversityInfo{ - + cost_exchange : float - + cost_double_degree : float - } - - abstract class Campus{ - + is_main_campus : bool - + name : string - + Comment : MD - + longitude : float - + latitude : float - } - class UniversityDri - - UniversityDri -down-|> BasicModuleCopyCore - - University "*"-down-"*" UniversityDri - - - class CampusTaggedItem - Campus -left- CampusTaggedItem - - - Campus "1..n" -- "1" University - - UniversityScholarship -down-|> ScholarShipCopyUniversity - - - - UniversityInfo "1" -down[bold,#green]- "1" University - SemestersDates "1" -down[bold,#green]- "1" University - UniversityTaggedItem "*" -down- "*" University - - UniversityScholarship "*" -down- "1" University -} -University "*" .right. "1" City - -@enduml diff --git a/docs/architecture.md b/docs/architecture.md index cb579d74..d399fc01 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -4,11 +4,11 @@ Architecture Présentation de l'architecture du backend. Vue complète : -![Architecture](UML/generated/Architecture.svg) +![Architecture](generated/architecture.svg) Vue plus précise : -![other_core](UML/generated/other_core.svg) -![AbstractModules](UML/generated/university.svg) -![Architecture](UML/generated/location.svg) -![Architecture](UML/generated/my_model__module.svg) -![Architecture](UML/generated/UserFunctions.svg) \ No newline at end of file +![other_core](generated/abstract.svg) +![other_core](generated/core.svg) +![AbstractModules](generated/university.svg) +![Architecture](generated/location.svg) +![Architecture](generated/user.svg) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 39343f58..bb41b5b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,4 +20,4 @@ flake8 django-debug-toolbar==1.9.1 pandas pyyaml -django-extensions==2.1.2 \ No newline at end of file +git+https://github.com/FloChehab/django-extensions.git@30c1a807aeb985739358d70907496e98d1857abb#egg=django-extensions -- GitLab From 2303c5bd7186636f964e0ef12a152a3f60f128a4 Mon Sep 17 00:00:00 2001 From: Florent Chehab Date: Sun, 9 Sep 2018 19:41:32 +0200 Subject: [PATCH 4/4] Fixed unique together in tagitems --- backend/models/campus/campusTaggedItem.py | 2 +- backend/models/city/cityTaggedItem.py | 2 +- backend/models/country/countryTaggedItem.py | 2 +- backend/models/university/universityTaggedItem.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/models/campus/campusTaggedItem.py b/backend/models/campus/campusTaggedItem.py index 3c772a1c..659058b6 100644 --- a/backend/models/campus/campusTaggedItem.py +++ b/backend/models/campus/campusTaggedItem.py @@ -14,7 +14,7 @@ class CampusTaggedItem(TaggedItem): return CampusTaggedItemSerializer class Meta: - unique_together = ('campus', 'tag') + unique_together = ('campus', 'tag', 'importance_level') class CampusTaggedItemSerializer(TaggedItemSerializer): diff --git a/backend/models/city/cityTaggedItem.py b/backend/models/city/cityTaggedItem.py index 6e1c7ada..8275ddd9 100644 --- a/backend/models/city/cityTaggedItem.py +++ b/backend/models/city/cityTaggedItem.py @@ -15,7 +15,7 @@ class CityTaggedItem(TaggedItem): return CityTaggedItemSerializer class Meta: - unique_together = ('city', 'tag') + unique_together = ('city', 'tag', 'importance_level') class CityTaggedItemSerializer(TaggedItemSerializer): diff --git a/backend/models/country/countryTaggedItem.py b/backend/models/country/countryTaggedItem.py index 39aa861c..03bca29b 100644 --- a/backend/models/country/countryTaggedItem.py +++ b/backend/models/country/countryTaggedItem.py @@ -14,7 +14,7 @@ class CountryTaggedItem(TaggedItem): return CountryTaggedItemSerializer class Meta: - unique_together = ('country', 'tag') + unique_together = ('country', 'tag', 'importance_level') class CountryTaggedItemSerializer(TaggedItemSerializer): diff --git a/backend/models/university/universityTaggedItem.py b/backend/models/university/universityTaggedItem.py index c8f1187b..8a3419a5 100644 --- a/backend/models/university/universityTaggedItem.py +++ b/backend/models/university/universityTaggedItem.py @@ -14,7 +14,7 @@ class UniversityTaggedItem(TaggedItem): return UniversityTaggedItemSerializer class Meta: - unique_together = ('university', 'tag') + unique_together = ('university', 'tag', 'importance_level') class UniversityTaggedItemSerializer(TaggedItemSerializer): -- GitLab