diff --git a/backend/load_data/assets/tags.json b/backend/load_data/assets/tags.json index fbf8f2c31a9cac34c9ff08aacfa1fa40ac1dfcdd..7966e0c80d469ad96a278b3c46bdb8d606d391ad 100644 --- a/backend/load_data/assets/tags.json +++ b/backend/load_data/assets/tags.json @@ -3,42 +3,7 @@ "name": "photos", "config": { "photos": { - "type": "array", - "content": { - "url": { - "type": "url", - "required": true, - "validators": { - "extension": [ - "jpg", - "jpeg", - "png", - "svg" - ] - } - }, - "title": { - "type": "text", - "required": true, - "validators": { - "max_length": 200 - } - }, - "licence": { - "type": "text", - "required": false, - "validators": { - "max_length": 200 - } - }, - "description": { - "type": "text", - "required": false, - "validators": { - "max_length": 500 - } - } - }, + "type": "photos", "required": true } } diff --git a/backend/migrations/0002_auto_20180901_1000.py b/backend/migrations/0002_auto_20180901_1000.py new file mode 100644 index 0000000000000000000000000000000000000000..38dd59fe687c556db14984d8a009f6c3683e13e2 --- /dev/null +++ b/backend/migrations/0002_auto_20180901_1000.py @@ -0,0 +1,34 @@ +# Generated by Django 2.0.3 on 2018-09-01 08:00 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('backend', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='campustaggeditem', + name='custom_content', + field=django.contrib.postgres.fields.jsonb.JSONField(default=dict), + ), + migrations.AddField( + model_name='citytaggeditem', + name='custom_content', + field=django.contrib.postgres.fields.jsonb.JSONField(default=dict), + ), + migrations.AddField( + model_name='countrytaggeditem', + name='custom_content', + field=django.contrib.postgres.fields.jsonb.JSONField(default=dict), + ), + migrations.AddField( + model_name='universitytaggeditem', + name='custom_content', + field=django.contrib.postgres.fields.jsonb.JSONField(default=dict), + ), + ] diff --git a/backend/models/module/basicModule.py b/backend/models/module/basicModule.py index 4b91062ad41050b65a2c590b682860dc3ed5350e..af902083128e728f8dbd30f9db71084d069a6754 100644 --- a/backend/models/module/basicModule.py +++ b/backend/models/module/basicModule.py @@ -2,27 +2,7 @@ from django.db import models from backend.models.my_model import MyModelVersionned, MyModelVersionnedSerializer, MyModelVersionnedViewSet from django.contrib.postgres.fields import JSONField from backend.models.tag.tagged_item_validation import validate_content_against_config - -USEFULL_LINKS_CONFIG = { - "usefull_links": { - "type": "array", - "content": { - "url": { - "type": "url", - "required": True, - "validators": {} - }, - "description": { - "type": "text", - "required": True, - "validators": { - "max_length": 500 - } - } - }, - "required": True - } -} +from backend.models.tag.tags_config import USEFULL_LINKS_CONFIG class BasicModule(MyModelVersionned): @@ -38,7 +18,7 @@ class BasicModuleSerializer(MyModelVersionnedSerializer): def validate(self, attrs): content = {'usefull_links': attrs['usefull_links']} - config = USEFULL_LINKS_CONFIG + config = {'usefull_links': USEFULL_LINKS_CONFIG} validate_content_against_config(config, content) return attrs diff --git a/backend/models/tag/taggedItem.py b/backend/models/tag/taggedItem.py index b248c022d62e10a4b1677d71c4142135f83e761f..cc91c5491cd4e23717319bcbc430995d5b8755fe 100644 --- a/backend/models/tag/taggedItem.py +++ b/backend/models/tag/taggedItem.py @@ -2,10 +2,12 @@ from django.db import models from backend.models.my_model import MyModelVersionned, MyModelVersionnedSerializer, MyModelVersionnedViewSet from .tag import Tag from .tagged_item_validation import tagged_item_validation +from django.contrib.postgres.fields import JSONField class TaggedItem(MyModelVersionned): tag = models.ForeignKey(Tag, related_name='+', on_delete=models.PROTECT) + custom_content = JSONField(default=dict) class Meta: abstract = True diff --git a/backend/models/tag/tagged_item_validation.py b/backend/models/tag/tagged_item_validation.py index e6024657a55f408ed3b921c64cfa51c83043f7a3..0babe5219cc6d8ba97494fc9df2fc8609b7ee7bf 100644 --- a/backend/models/tag/tagged_item_validation.py +++ b/backend/models/tag/tagged_item_validation.py @@ -1,6 +1,8 @@ from .checks import check_required from .validators import validate_url, validate_text from rest_framework.validators import ValidationError +from .tags_config import PHOTOS_TAG_GONFIG +from .tags_config import USEFULL_LINKS_CONFIG def tagged_item_validation(attrs): @@ -19,15 +21,22 @@ def validate_content_against_config(config, content): field_submitted = content[field] field_config = config[field] + field_type = field_config['type'] if field_type == 'url': validate_url(field_config, field_submitted) elif field_type == 'text': validate_text(field_config, field_submitted) + elif field_type == 'photos': + validate_content_against_config({"photos": PHOTOS_TAG_GONFIG}, { + "photos": field_submitted}) + elif field_type == 'usefull_links': + validate_content_against_config({"ul": USEFULL_LINKS_CONFIG}, { + "ul": field_submitted}) elif field_type == 'array': if type(field_submitted) is not list: - raise ValidationError("A array is required here !") + raise ValidationError("An array is required here !") for item in field_submitted: validate_content_against_config(field_config['content'], item) else: diff --git a/backend/models/tag/tags_config/__init__.py b/backend/models/tag/tags_config/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d859e5e46cb7dc8c9b5c7004eabe3bac6d4f2717 --- /dev/null +++ b/backend/models/tag/tags_config/__init__.py @@ -0,0 +1,2 @@ +from .photos import PHOTOS_TAG_GONFIG # noqa: F401 +from .usefull_links import USEFULL_LINKS_CONFIG # noqa: F401 diff --git a/backend/models/tag/tags_config/photos.py b/backend/models/tag/tags_config/photos.py new file mode 100644 index 0000000000000000000000000000000000000000..67f1f84049134ba6894526f4426e0511b6504179 --- /dev/null +++ b/backend/models/tag/tags_config/photos.py @@ -0,0 +1,39 @@ +PHOTOS_TAG_GONFIG = { + "type": "array", + "required": True, + "content": { + "url": { + "type": "url", + "required": True, + "validators": { + "extension": [ + "jpg", + "jpeg", + "png", + "svg" + ] + } + }, + "title": { + "type": "text", + "required": True, + "validators": { + "max_length": 200 + } + }, + "licence": { + "type": "text", + "required": False, + "validators": { + "max_length": 200 + } + }, + "description": { + "type": "text", + "required": False, + "validators": { + "max_length": 500 + } + } + } +} diff --git a/backend/models/tag/tags_config/usefull_links.py b/backend/models/tag/tags_config/usefull_links.py new file mode 100644 index 0000000000000000000000000000000000000000..d86c90e372007f28690ff6e6f9593c6730c1dfff --- /dev/null +++ b/backend/models/tag/tags_config/usefull_links.py @@ -0,0 +1,18 @@ +USEFULL_LINKS_CONFIG = { + "type": "array", + "required": True, + "content": { + "url": { + "type": "url", + "required": True, + "validators": {} + }, + "description": { + "type": "text", + "required": True, + "validators": { + "max_length": 500 + } + } + } +}