diff --git a/Platform/settings.py b/Platform/settings.py index d2ed674..954b998 100644 --- a/Platform/settings.py +++ b/Platform/settings.py @@ -48,7 +48,8 @@ INSTALLED_APPS = [ 'web.apps.WebConfig', 'configs.apps.ConfigsConfig', 'experiments.apps.ExperimentsConfig', - 'stats.apps.StatsConfig' + 'stats.apps.StatsConfig', + 'schemas.apps.SchemasConfig', ] MIDDLEWARE = [ diff --git a/Platform/urls.py b/Platform/urls.py index 36f9857..01f40ff 100644 --- a/Platform/urls.py +++ b/Platform/urls.py @@ -21,5 +21,6 @@ urlpatterns = [ path('configs/', include('configs.urls')), path('experiments/', include('experiments.urls')), path('stats/', include('stats.urls')), + path('schemas/', include('schemas.urls')), path('', include('web.urls')) ] diff --git a/schemas/__init__.py b/schemas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/schemas/admin.py b/schemas/admin.py new file mode 100644 index 0000000..b4dfc3f --- /dev/null +++ b/schemas/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +# Register your models here. +from .models import Schema + +admin.site.register(Schema) \ No newline at end of file diff --git a/schemas/apps.py b/schemas/apps.py new file mode 100644 index 0000000..6abc083 --- /dev/null +++ b/schemas/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SchemasConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'schemas' diff --git a/schemas/migrations/0001_initial.py b/schemas/migrations/0001_initial.py new file mode 100644 index 0000000..760060d --- /dev/null +++ b/schemas/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 5.1.4 on 2024-12-08 11:56 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('web', '0007_customuser_telegram_id_customuser_telegram_username'), + ] + + operations = [ + migrations.CreateModel( + name='Schema', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('data', models.BinaryField(blank=True, null=True)), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.project')), + ], + options={ + 'indexes': [models.Index(fields=['project'], name='schemas_sch_project_18fee8_idx')], + }, + ), + ] diff --git a/schemas/migrations/0002_alter_schema_data.py b/schemas/migrations/0002_alter_schema_data.py new file mode 100644 index 0000000..a1ffac2 --- /dev/null +++ b/schemas/migrations/0002_alter_schema_data.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.4 on 2024-12-08 12:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('schemas', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='schema', + name='data', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/schemas/migrations/0003_alter_schema_data.py b/schemas/migrations/0003_alter_schema_data.py new file mode 100644 index 0000000..e8c8da3 --- /dev/null +++ b/schemas/migrations/0003_alter_schema_data.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.4 on 2024-12-08 12:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('schemas', '0002_alter_schema_data'), + ] + + operations = [ + migrations.AlterField( + model_name='schema', + name='data', + field=models.TextField(blank=True, default=''), + ), + ] diff --git a/schemas/migrations/__init__.py b/schemas/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/schemas/models.py b/schemas/models.py new file mode 100644 index 0000000..fbb4e3b --- /dev/null +++ b/schemas/models.py @@ -0,0 +1,14 @@ +from django.db import models + +# Create your models here. + + +class Schema(models.Model): + project = models.ForeignKey('web.Project', on_delete=models.CASCADE) + name = models.TextField() + data = models.TextField(default='', blank=True) + + class Meta: + indexes = [ + models.Index(fields=['project']) + ] diff --git a/schemas/tests.py b/schemas/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/schemas/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/schemas/urls.py b/schemas/urls.py new file mode 100644 index 0000000..1526e59 --- /dev/null +++ b/schemas/urls.py @@ -0,0 +1,9 @@ +from django.contrib import admin +from django.urls import path + +from .views import * + +urlpatterns = [ + path(*SchemasView.as_path()), + path('get', get_schemas) +] diff --git a/schemas/views.py b/schemas/views.py new file mode 100644 index 0000000..1218d8b --- /dev/null +++ b/schemas/views.py @@ -0,0 +1,46 @@ +from json import loads + +from django.http import HttpResponse, JsonResponse + +from BaseLib.BaseView import BaseView +from BaseLib.configurator import * +from Platform import settings +from schemas.models import Schema + + +# Create your views here. + + +class SchemasView(BaseView): + required_login = True + endpoint = '' + view_file = 'schemas.html' + + def pre_handle(self): + self.context['schemas'] = Schema.objects.filter(project=self.request.user.selected_project) + + def post_create_schema(self): + Schema.objects.create(project=self.request.user.selected_project, name=self.request.POST['name']) + return '/schemas' + + def post_delete(self): + Schema.objects.get(id=self.request.POST['schema']).delete() + return '/schemas' + + + def post_save(self): + schema = Schema.objects.get(id=self.request.POST['schema']) + schema.data = self.request.POST['data'] + schema.save() + return '/schemas' + + +def get_schemas(request): + project = request.GET.get('project') + if project is None: + return HttpResponse('', status=400) + data = { + schema.name: schema.data + for schema in Schema.objects.filter(project__name=project) + } + return JsonResponse(data, safe=False) diff --git a/templates/includes/sidebar.html b/templates/includes/sidebar.html index 5690a48..575958e 100644 --- a/templates/includes/sidebar.html +++ b/templates/includes/sidebar.html @@ -98,6 +98,14 @@
+