From 5aeee4f291be1fbffe5857d67639a6faffe345c7 Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Mon, 29 Jul 2024 09:14:35 +0300 Subject: [PATCH] backend part environment --- .vscode/PythonImportHelper-v2-Completion.json | 89 +++++++++++++++++-- back/back/settings.py | 1 + back/object/admin.py | 9 +- back/object/models.py | 34 ++++--- back/object/serializers.py | 18 +++- poetry.lock | 16 +++- pyproject.toml | 1 + 7 files changed, 141 insertions(+), 27 deletions(-) diff --git a/.vscode/PythonImportHelper-v2-Completion.json b/.vscode/PythonImportHelper-v2-Completion.json index 5f77b9d..5980d5a 100644 --- a/.vscode/PythonImportHelper-v2-Completion.json +++ b/.vscode/PythonImportHelper-v2-Completion.json @@ -168,6 +168,30 @@ "detail": "django.db", "documentation": {} }, + { + "label": "migrations", + "importPath": "django.db", + "description": "django.db", + "isExtraImport": true, + "detail": "django.db", + "documentation": {} + }, + { + "label": "models", + "importPath": "django.db", + "description": "django.db", + "isExtraImport": true, + "detail": "django.db", + "documentation": {} + }, + { + "label": "migrations", + "importPath": "django.db", + "description": "django.db", + "isExtraImport": true, + "detail": "django.db", + "documentation": {} + }, { "label": "models", "importPath": "django.db", @@ -594,6 +618,23 @@ "detail": "object.models", "documentation": {} }, + { + "label": "colorfield.fields", + "kind": 6, + "isExtraImport": true, + "importPath": "colorfield.fields", + "description": "colorfield.fields", + "detail": "colorfield.fields", + "documentation": {} + }, + { + "label": "ColorField", + "importPath": "colorfield.fields", + "description": "colorfield.fields", + "isExtraImport": true, + "detail": "colorfield.fields", + "documentation": {} + }, { "label": "Image", "importPath": "PIL", @@ -1177,12 +1218,30 @@ "detail": "back.object.migrations.0008_rename_can_disabled_element3d_can_not_disable", "documentation": {} }, + { + "label": "Migration", + "kind": 6, + "importPath": "back.object.migrations.0009_environment_remove_scene3d_hdr_gainmap_and_more", + "description": "back.object.migrations.0009_environment_remove_scene3d_hdr_gainmap_and_more", + "peekOfCode": "class Migration(migrations.Migration):\n dependencies = [\n ('object', '0008_rename_can_disabled_element3d_can_not_disable'),\n ]\n operations = [\n migrations.CreateModel(\n name='Environment',\n fields=[\n ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n ('env_displacementmap', models.FileField(blank=True, null=True, upload_to=object.models.group_based_upload_to)),", + "detail": "back.object.migrations.0009_environment_remove_scene3d_hdr_gainmap_and_more", + "documentation": {} + }, + { + "label": "Migration", + "kind": 6, + "importPath": "back.object.migrations.0010_environment_clear_color", + "description": "back.object.migrations.0010_environment_clear_color", + "peekOfCode": "class Migration(migrations.Migration):\n dependencies = [\n ('object', '0009_environment_remove_scene3d_hdr_gainmap_and_more'),\n ]\n operations = [\n migrations.AddField(\n model_name='environment',\n name='clear_color',\n field=colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=25, null=True, samples=None),\n ),", + "detail": "back.object.migrations.0010_environment_clear_color", + "documentation": {} + }, { "label": "Scene3DAdmin", "kind": 6, "importPath": "back.object.admin", "description": "back.object.admin", - "peekOfCode": "class Scene3DAdmin(admin.ModelAdmin):\n filter_horizontal = ('elements',)\nadmin.site.register(Scene3D, Scene3DAdmin)\nadmin.site.register(Element3D)\nadmin.site.register(ClickableArea)", + "peekOfCode": "class Scene3DAdmin(admin.ModelAdmin):\n filter_horizontal = (\"elements\",)\nadmin.site.register(Environment)\nadmin.site.register(Scene3D, Scene3DAdmin)\nadmin.site.register(Element3D)\nadmin.site.register(ClickableArea)", "detail": "back.object.admin", "documentation": {} }, @@ -1195,6 +1254,15 @@ "detail": "back.object.apps", "documentation": {} }, + { + "label": "Environment", + "kind": 6, + "importPath": "back.object.models", + "description": "back.object.models", + "peekOfCode": "class Environment(models.Model):\n env_displacementmap = models.FileField(\n upload_to=group_based_upload_to, blank=True, null=True\n )\n env_normalmap = models.FileField(\n upload_to=group_based_upload_to, blank=True, null=True\n )\n clear_color = ColorField(blank=True, null=True)\n hdr_gainmap = models.FileField(\n upload_to=group_based_upload_to, blank=True, null=True", + "detail": "back.object.models", + "documentation": {} + }, { "label": "Element3D", "kind": 6, @@ -1209,7 +1277,7 @@ "kind": 6, "importPath": "back.object.models", "description": "back.object.models", - "peekOfCode": "class Scene3D(models.Model):\n filter_horizontal = (\"elements\",)\n name = models.CharField(\n max_length=120,\n )\n elements = models.ManyToManyField(Element3D)\n min_distance = models.IntegerField(\n validators=[MinValueValidator(1), MaxValueValidator(600)], blank=True, null=True\n )\n max_distance = models.IntegerField(", + "peekOfCode": "class Scene3D(models.Model):\n name = models.CharField(max_length=120)\n elements = models.ManyToManyField(Element3D)\n env = models.ForeignKey(Environment, models.RESTRICT, blank=True, null=True)\n min_distance = models.IntegerField(\n default=10,\n validators=[MinValueValidator(1), MaxValueValidator(600)],\n )\n max_distance = models.IntegerField(\n default=20,", "detail": "back.object.models", "documentation": {} }, @@ -1227,7 +1295,7 @@ "kind": 2, "importPath": "back.object.models", "description": "back.object.models", - "peekOfCode": "def group_based_upload_to(instance, filename):\n logger.info(instance)\n return \"files/image/{}/{}/{}\".format(\n type(instance).__name__.lower(), instance.id, filename\n )\nclass Element3D(models.Model):\n parent = models.ForeignKey(\"self\", on_delete=models.PROTECT, blank=True, null=True)\n model_file = models.FileField(upload_to=group_based_upload_to)\n name = models.CharField(max_length=255)\n description = models.TextField(blank=True, null=True)", + "peekOfCode": "def group_based_upload_to(instance, filename):\n logger.info(instance)\n return \"files/image/{}/{}/{}\".format(\n type(instance).__name__.lower(), instance.id, filename\n )\nclass Environment(models.Model):\n env_displacementmap = models.FileField(\n upload_to=group_based_upload_to, blank=True, null=True\n )\n env_normalmap = models.FileField(", "detail": "back.object.models", "documentation": {} }, @@ -1245,16 +1313,25 @@ "kind": 5, "importPath": "back.object.models", "description": "back.object.models", - "peekOfCode": "logger = logging.getLogger(\"root\")\ndef group_based_upload_to(instance, filename):\n logger.info(instance)\n return \"files/image/{}/{}/{}\".format(\n type(instance).__name__.lower(), instance.id, filename\n )\nclass Element3D(models.Model):\n parent = models.ForeignKey(\"self\", on_delete=models.PROTECT, blank=True, null=True)\n model_file = models.FileField(upload_to=group_based_upload_to)\n name = models.CharField(max_length=255)", + "peekOfCode": "logger = logging.getLogger(\"root\")\ndef group_based_upload_to(instance, filename):\n logger.info(instance)\n return \"files/image/{}/{}/{}\".format(\n type(instance).__name__.lower(), instance.id, filename\n )\nclass Environment(models.Model):\n env_displacementmap = models.FileField(\n upload_to=group_based_upload_to, blank=True, null=True\n )", "detail": "back.object.models", "documentation": {} }, + { + "label": "EnvironmentSerializer", + "kind": 6, + "importPath": "back.object.serializers", + "description": "back.object.serializers", + "peekOfCode": "class EnvironmentSerializer(serializers.ModelSerializer):\n hdr_gainmap = serializers.FileField(use_url=False)\n hdr_json = serializers.FileField(use_url=False)\n hdr_webp = serializers.FileField(use_url=False)\n env_displacementmap = serializers.FileField(use_url=False)\n env_normalmap = serializers.FileField(use_url=False)\n class Meta:\n model = Environment\n fields = \"__all__\"\nclass Element3DSerializer(serializers.ModelSerializer):", + "detail": "back.object.serializers", + "documentation": {} + }, { "label": "Element3DSerializer", "kind": 6, "importPath": "back.object.serializers", "description": "back.object.serializers", - "peekOfCode": "class Element3DSerializer(serializers.ModelSerializer):\n model_file = serializers.ImageField(use_url=False)\n class Meta:\n model = Element3D\n fields = \"__all__\"\nclass Scene3DSerializer(serializers.ModelSerializer):\n elements = Element3DSerializer(many=True)\n hdr_gainmap = serializers.FileField(use_url=False)\n hdr_json = serializers.FileField(use_url=False)\n hdr_webp = serializers.FileField(use_url=False)", + "peekOfCode": "class Element3DSerializer(serializers.ModelSerializer):\n model_file = serializers.ImageField(use_url=False)\n class Meta:\n model = Element3D\n fields = \"__all__\"\nclass Scene3DSerializer(serializers.ModelSerializer):\n elements = Element3DSerializer(many=True)\n env = EnvironmentSerializer()\n class Meta:\n model = Scene3D", "detail": "back.object.serializers", "documentation": {} }, @@ -1263,7 +1340,7 @@ "kind": 6, "importPath": "back.object.serializers", "description": "back.object.serializers", - "peekOfCode": "class Scene3DSerializer(serializers.ModelSerializer):\n elements = Element3DSerializer(many=True)\n hdr_gainmap = serializers.FileField(use_url=False)\n hdr_json = serializers.FileField(use_url=False)\n hdr_webp = serializers.FileField(use_url=False)\n class Meta:\n model = Scene3D\n fields = \"__all__\"\n depth = 2\nclass ClickableAreaSerializer(serializers.ModelSerializer):", + "peekOfCode": "class Scene3DSerializer(serializers.ModelSerializer):\n elements = Element3DSerializer(many=True)\n env = EnvironmentSerializer()\n class Meta:\n model = Scene3D\n fields = \"__all__\"\n depth = 2\nclass ClickableAreaSerializer(serializers.ModelSerializer):\n image = serializers.ImageField(use_url=False)\n class Meta:", "detail": "back.object.serializers", "documentation": {} }, diff --git a/back/back/settings.py b/back/back/settings.py index 302a8ee..5e0483b 100644 --- a/back/back/settings.py +++ b/back/back/settings.py @@ -83,6 +83,7 @@ INSTALLED_APPS = [ "rest_framework", "crispy_forms", "crispy_bootstrap4", + "colorfield", "api", "frontImages", "object", diff --git a/back/object/admin.py b/back/object/admin.py index 1147257..1bad528 100644 --- a/back/object/admin.py +++ b/back/object/admin.py @@ -1,9 +1,12 @@ from django.contrib import admin -from .models import ClickableArea, Element3D, Scene3D +from .models import ClickableArea, Element3D, Environment, Scene3D + class Scene3DAdmin(admin.ModelAdmin): - filter_horizontal = ('elements',) + filter_horizontal = ("elements",) + +admin.site.register(Environment) admin.site.register(Scene3D, Scene3DAdmin) admin.site.register(Element3D) -admin.site.register(ClickableArea) \ No newline at end of file +admin.site.register(ClickableArea) diff --git a/back/object/models.py b/back/object/models.py index b49e3d5..1eadce1 100644 --- a/back/object/models.py +++ b/back/object/models.py @@ -2,6 +2,7 @@ from PIL import Image from django.db import models from django.core.validators import MinValueValidator, MaxValueValidator from django.core.exceptions import ValidationError +from colorfield.fields import ColorField import logging logger = logging.getLogger("root") @@ -14,6 +15,21 @@ def group_based_upload_to(instance, filename): ) +class Environment(models.Model): + env_displacementmap = models.FileField( + upload_to=group_based_upload_to, blank=True, null=True + ) + env_normalmap = models.FileField( + upload_to=group_based_upload_to, blank=True, null=True + ) + clear_color = ColorField(blank=True, null=True) + hdr_gainmap = models.FileField( + upload_to=group_based_upload_to, blank=True, null=True + ) + hdr_json = models.FileField(upload_to=group_based_upload_to, blank=True, null=True) + hdr_webp = models.FileField(upload_to=group_based_upload_to, blank=True, null=True) + + class Element3D(models.Model): parent = models.ForeignKey("self", on_delete=models.PROTECT, blank=True, null=True) model_file = models.FileField(upload_to=group_based_upload_to) @@ -27,27 +43,19 @@ class Element3D(models.Model): class Scene3D(models.Model): - filter_horizontal = ("elements",) - name = models.CharField( - max_length=120, - ) + name = models.CharField(max_length=120) elements = models.ManyToManyField(Element3D) + env = models.ForeignKey(Environment, models.RESTRICT, blank=True, null=True) min_distance = models.IntegerField( - validators=[MinValueValidator(1), MaxValueValidator(600)], blank=True, null=True + default=10, + validators=[MinValueValidator(1), MaxValueValidator(600)], ) max_distance = models.IntegerField( + default=20, validators=[MinValueValidator(2), MaxValueValidator(1000)], - blank=True, - null=True, ) - hdr_gainmap = models.FileField( - upload_to=group_based_upload_to, blank=True, null=True - ) - hdr_json = models.FileField(upload_to=group_based_upload_to, blank=True, null=True) - hdr_webp = models.FileField(upload_to=group_based_upload_to, blank=True, null=True) - def __str__(self): return self.name diff --git a/back/object/serializers.py b/back/object/serializers.py index c9e2e1f..ec50e36 100644 --- a/back/object/serializers.py +++ b/back/object/serializers.py @@ -1,5 +1,17 @@ from rest_framework import serializers -from .models import Scene3D, Element3D, ClickableArea +from .models import Scene3D, Element3D, ClickableArea, Environment + + +class EnvironmentSerializer(serializers.ModelSerializer): + hdr_gainmap = serializers.FileField(use_url=False) + hdr_json = serializers.FileField(use_url=False) + hdr_webp = serializers.FileField(use_url=False) + env_displacementmap = serializers.FileField(use_url=False) + env_normalmap = serializers.FileField(use_url=False) + + class Meta: + model = Environment + fields = "__all__" class Element3DSerializer(serializers.ModelSerializer): @@ -12,9 +24,7 @@ class Element3DSerializer(serializers.ModelSerializer): class Scene3DSerializer(serializers.ModelSerializer): elements = Element3DSerializer(many=True) - hdr_gainmap = serializers.FileField(use_url=False) - hdr_json = serializers.FileField(use_url=False) - hdr_webp = serializers.FileField(use_url=False) + env = EnvironmentSerializer() class Meta: model = Scene3D diff --git a/poetry.lock b/poetry.lock index 17abaf2..d609394 100644 --- a/poetry.lock +++ b/poetry.lock @@ -63,6 +63,20 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""} argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] +[[package]] +name = "django-colorfield" +version = "0.11.0" +description = "color field for django models with a nice color-picker in the admin." +optional = false +python-versions = "*" +files = [ + {file = "django-colorfield-0.11.0.tar.gz", hash = "sha256:05c38c8eb2a94938b810a19b2011846391a4ce71d1c92e88a35974fbcc8fc62e"}, + {file = "django_colorfield-0.11.0-py3-none-any.whl", hash = "sha256:460f40e6123b6ae0fb51a4eb86fc258fcdc0ea28f75102b685e8209b1eae9ec3"}, +] + +[package.dependencies] +Pillow = ">=9.0.0" + [[package]] name = "django-cors-headers" version = "4.3.1" @@ -449,4 +463,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "be85620e01baf8ceb925bd6fe9283c50da4fc1a97d9f572b92266adb0f44c124" +content-hash = "6b760d833dfd807526e05ba86e0e6cddb82ee47ec315f4a51d469aecfd1534e4" diff --git a/pyproject.toml b/pyproject.toml index 6e5be20..80cdd9d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ django-filter = "^24.2" django-crispy-forms = "^2.2" crispy-bootstrap4 = "^2024.1" django-extensions = "^3.2.3" +django-colorfield = "^0.11.0" [build-system]