From 4991376d93c56cd5791a8b722b55d7ce8dd55ac8 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sat, 23 Sep 2023 17:59:26 +0300 Subject: [PATCH] configs --- Platform/settings.py | 3 +- Platform/urls.py | 1 + configs/__init__.py | 0 configs/admin.py | 3 + configs/apps.py | 6 ++ configs/migrations/0001_initial.py | 33 +++++++++ configs/migrations/0002_config_stage.py | 18 +++++ ...configs_con_project_8236d6_idx_and_more.py | 29 ++++++++ configs/migrations/__init__.py | 0 configs/models.py | 22 ++++++ configs/tests.py | 3 + configs/urls.py | 8 +++ configs/views.py | 43 ++++++++++++ templates/configs.html | 70 +++++++++++++++++++ templates/includes/sidebar.html | 2 +- ...omuser_vk_id_alter_customuser_yandex_id.py | 23 ++++++ 16 files changed, 262 insertions(+), 2 deletions(-) create mode 100644 configs/__init__.py create mode 100644 configs/admin.py create mode 100644 configs/apps.py create mode 100644 configs/migrations/0001_initial.py create mode 100644 configs/migrations/0002_config_stage.py create mode 100644 configs/migrations/0003_remove_config_configs_con_project_8236d6_idx_and_more.py create mode 100644 configs/migrations/__init__.py create mode 100644 configs/models.py create mode 100644 configs/tests.py create mode 100644 configs/urls.py create mode 100644 configs/views.py create mode 100644 templates/configs.html create mode 100644 web/migrations/0004_alter_customuser_vk_id_alter_customuser_yandex_id.py diff --git a/Platform/settings.py b/Platform/settings.py index 295dbcd..e9e1dca 100644 --- a/Platform/settings.py +++ b/Platform/settings.py @@ -45,7 +45,8 @@ INSTALLED_APPS = [ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", - 'web.apps.WebConfig' + 'web.apps.WebConfig', + 'configs.apps.ConfigsConfig' ] MIDDLEWARE = [ diff --git a/Platform/urls.py b/Platform/urls.py index fc5b15f..a76e99c 100644 --- a/Platform/urls.py +++ b/Platform/urls.py @@ -18,5 +18,6 @@ from django.urls import path, include urlpatterns = [ path("admin/", admin.site.urls), + path('configs/', include('configs.urls')), path('', include('web.urls')) ] diff --git a/configs/__init__.py b/configs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/configs/admin.py b/configs/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/configs/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/configs/apps.py b/configs/apps.py new file mode 100644 index 0000000..3637b39 --- /dev/null +++ b/configs/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ConfigsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'configs' diff --git a/configs/migrations/0001_initial.py b/configs/migrations/0001_initial.py new file mode 100644 index 0000000..7a95108 --- /dev/null +++ b/configs/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# Generated by Django 4.1.7 on 2023-09-23 13:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('web', '0004_alter_customuser_vk_id_alter_customuser_yandex_id'), + ] + + operations = [ + migrations.CreateModel( + name='Config', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('data', models.JSONField(default=dict)), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.project')), + ], + ), + migrations.AddIndex( + model_name='config', + index=models.Index(fields=['project'], name='configs_con_project_8236d6_idx'), + ), + migrations.AddIndex( + model_name='config', + index=models.Index(fields=['project', 'name'], name='configs_con_project_2e12ee_idx'), + ), + ] diff --git a/configs/migrations/0002_config_stage.py b/configs/migrations/0002_config_stage.py new file mode 100644 index 0000000..d973b7b --- /dev/null +++ b/configs/migrations/0002_config_stage.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.7 on 2023-09-23 14:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('configs', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='config', + name='stage', + field=models.TextField(default='production'), + ), + ] diff --git a/configs/migrations/0003_remove_config_configs_con_project_8236d6_idx_and_more.py b/configs/migrations/0003_remove_config_configs_con_project_8236d6_idx_and_more.py new file mode 100644 index 0000000..80152f4 --- /dev/null +++ b/configs/migrations/0003_remove_config_configs_con_project_8236d6_idx_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.7 on 2023-09-23 14:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('configs', '0002_config_stage'), + ] + + operations = [ + migrations.RemoveIndex( + model_name='config', + name='configs_con_project_8236d6_idx', + ), + migrations.RemoveIndex( + model_name='config', + name='configs_con_project_2e12ee_idx', + ), + migrations.AddIndex( + model_name='config', + index=models.Index(fields=['project', 'stage'], name='configs_con_project_19e8a6_idx'), + ), + migrations.AddIndex( + model_name='config', + index=models.Index(fields=['project', 'name', 'stage'], name='configs_con_project_a9e1de_idx'), + ), + ] diff --git a/configs/migrations/__init__.py b/configs/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/configs/models.py b/configs/models.py new file mode 100644 index 0000000..b53a78b --- /dev/null +++ b/configs/models.py @@ -0,0 +1,22 @@ +from json import dumps + +from django.db import models + +# Create your models here. + + +class Config(models.Model): + name = models.TextField() + data = models.JSONField(default=dict) + project = models.ForeignKey('web.Project', on_delete=models.CASCADE) + stage = models.TextField(default='production') + + @property + def data_pretty(self): + return dumps(self.data, indent=4) + + class Meta: + indexes = [ + models.Index(fields=['project', 'stage']), + models.Index(fields=['project', 'name', 'stage']) + ] diff --git a/configs/tests.py b/configs/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/configs/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/configs/urls.py b/configs/urls.py new file mode 100644 index 0000000..d5e68fe --- /dev/null +++ b/configs/urls.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from django.urls import path + +from .views import * + +urlpatterns = [ + path(*ConfigsView.as_path()) +] diff --git a/configs/views.py b/configs/views.py new file mode 100644 index 0000000..8e17542 --- /dev/null +++ b/configs/views.py @@ -0,0 +1,43 @@ +from json import loads + +from BaseLib.BaseView import BaseView +from configs.models import Config + + +# Create your views here. + + +class ConfigsView(BaseView): + required_login = True + endpoint = '' + view_file = 'configs.html' + + def pre_handle(self): + if 'stage' not in self.request.GET or self.request.GET['stage'] not in ['development', 'production']: + return '/configs/?stage=production' + self.stage = self.request.GET['stage'] + self.context['stage'] = self.stage + + def get(self): + self.context['configs'] = Config.objects.filter(project=self.request.user.selected_project, stage=self.stage).order_by('name') + self.context['error'] = 'error' in self.request.GET + + def post_create_config(self): + Config.objects.create(name=self.request.POST['name'], project=self.request.user.selected_project, stage=self.stage) + return '/configs/?stage=' + self.stage + + def post_delete(self): + config = Config.objects.get(id=self.request.POST['config']) + config.delete() + return '/configs/?stage=' + config.stage + + def post_save(self): + data = self.request.POST['data'] + try: + data = loads(data) + except: + return '/configs?error=config_is_not_json' + config = Config.objects.get(id=self.request.POST['config']) + config.data = data + config.save() + return '/configs/?stage=' + config.stage diff --git a/templates/configs.html b/templates/configs.html new file mode 100644 index 0000000..43879fa --- /dev/null +++ b/templates/configs.html @@ -0,0 +1,70 @@ +{% extends 'layouts/base.html' %} + +{% block content %} +

Конфиги

+ + + {% if error %} + + {% endif %} + + + + + + + {% for config in configs %} + + + + + + {% endfor %} + +
НазваниеДействие
{{ config.name }}
+{% endblock %} \ No newline at end of file diff --git a/templates/includes/sidebar.html b/templates/includes/sidebar.html index 6a9ab66..407d174 100644 --- a/templates/includes/sidebar.html +++ b/templates/includes/sidebar.html @@ -75,7 +75,7 @@ {% endif %}