This commit is contained in:
2022-12-22 19:12:06 +01:00
5 changed files with 319 additions and 152 deletions

View File

@@ -26,4 +26,4 @@ def add_log_action(request, form, app_label, model, add=True):
) )
def create_random_id(): def create_random_id():
return str(uuid.uuid4())[:36] return str(uuid.uuid4())[:8]

View File

@@ -1,4 +1,4 @@
# Generated by Django 4.0.6 on 2022-07-30 22:34 # Generated by Django 4.1.2 on 2022-12-21 11:42
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models
@@ -11,106 +11,219 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('tasks', '0002_alter_task_options_task_slug_task_slug_id_and_more'), ("tasks", "0004_set_fields_unique"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Attachment', name="Attachment",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=128, verbose_name='Titel')), "id",
('slug', models.SlugField()), models.AutoField(
('description', models.TextField(blank=True, null=True)), auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=128, verbose_name="Titel")),
("slug", models.SlugField()),
("description", models.TextField(blank=True, null=True)),
], ],
options={ options={
'verbose_name': 'Anhang Ordner', "verbose_name": "Anhang Ordner",
'verbose_name_plural': 'Anhang Ordner', "verbose_name_plural": "Anhang Ordner",
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='TopicGroup', name="TopicGroup",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=128, verbose_name='Titel')), "id",
('shortterm', models.CharField(blank=True, max_length=128, unique=True)), models.AutoField(
('slug', models.SlugField(unique=True)), auto_created=True,
('short_description', models.TextField(blank=True, null=True)), primary_key=True,
('order', models.PositiveSmallIntegerField(blank=True, null=True, unique=True, verbose_name='Reihenfolge')), serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=128, verbose_name="Titel")),
(
"shortterm",
models.CharField(blank=True, max_length=128, unique=True),
),
("slug", models.SlugField(unique=True)),
("short_description", models.TextField(blank=True, null=True)),
(
"order",
models.PositiveSmallIntegerField(
blank=True, null=True, unique=True, verbose_name="Reihenfolge"
),
),
], ],
options={ options={
'verbose_name': 'Themenbereich', "verbose_name": "Themenbereich",
'verbose_name_plural': 'Themenbereiche', "verbose_name_plural": "Themenbereiche",
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Topic', name="Topic",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=128, verbose_name='Titel')), "id",
('slug', models.SlugField()), models.AutoField(
('archive', models.BooleanField(default=False, verbose_name='Archiv')), auto_created=True,
('description', models.TextField(blank=True, null=True)), primary_key=True,
('task_list', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='tasks.tasklist')), serialize=False,
('topic_group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='intern.topicgroup', verbose_name='Themenbereich')), verbose_name="ID",
),
),
("title", models.CharField(max_length=128, verbose_name="Titel")),
("slug", models.SlugField()),
("archive", models.BooleanField(default=False, verbose_name="Archiv")),
("description", models.TextField(blank=True, null=True)),
(
"task_list",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="tasks.tasklist",
),
),
(
"topic_group",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="intern.topicgroup",
verbose_name="Themenbereich",
),
),
], ],
options={ options={
'verbose_name': 'Thema', "verbose_name": "Thema",
'verbose_name_plural': 'Themen', "verbose_name_plural": "Themen",
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='FileUpload', name="FileUpload",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(blank=True, max_length=128, verbose_name='Titel')), "id",
('file_field', models.FileField(upload_to='uploads/intern/files/', verbose_name='Dokument')), models.AutoField(
('date', models.DateField(default=datetime.date.today, verbose_name='Datum')), auto_created=True,
('attachment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='intern.attachment', verbose_name='Anhang Ordner')), primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"title",
models.CharField(blank=True, max_length=128, verbose_name="Titel"),
),
(
"file_field",
models.FileField(
upload_to="uploads/intern/files/", verbose_name="Dokument"
),
),
(
"date",
models.DateField(default=datetime.date.today, verbose_name="Datum"),
),
(
"attachment",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="intern.attachment",
verbose_name="Anhang Ordner",
),
),
], ],
options={ options={
'verbose_name': 'Datei', "verbose_name": "Datei",
'verbose_name_plural': 'Dateien', "verbose_name_plural": "Dateien",
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Etherpad', name="Etherpad",
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), (
('title', models.CharField(max_length=128, verbose_name='Titel')), "id",
('slug_id', models.CharField(default=fet2020.utils.create_random_id, editable=False, max_length=8, unique=True)), models.AutoField(
('etherpad_key', models.CharField(blank=True, max_length=50)), auto_created=True,
('date', models.DateField(default=datetime.date.today, verbose_name='Datum')), primary_key=True,
('attachment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='intern.attachment', verbose_name='Anhang Ordner')), serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=128, verbose_name="Titel")),
(
"slug_id",
models.CharField(
default=fet2020.utils.create_random_id,
editable=False,
max_length=8,
unique=True,
),
),
("etherpad_key", models.CharField(blank=True, max_length=50)),
(
"date",
models.DateField(default=datetime.date.today, verbose_name="Datum"),
),
(
"attachment",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="intern.attachment",
verbose_name="Anhang Ordner",
),
),
], ],
options={ options={
'verbose_name': 'Etherpad', "verbose_name": "Etherpad",
'verbose_name_plural': 'Etherpads', "verbose_name_plural": "Etherpads",
}, },
), ),
migrations.AddField( migrations.AddField(
model_name='attachment', model_name="attachment",
name='topic', name="topic",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='intern.topic', verbose_name='Thema'), field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="intern.topic",
verbose_name="Thema",
),
), ),
migrations.AddConstraint( migrations.AddConstraint(
model_name='topic', model_name="topic",
constraint=models.UniqueConstraint(fields=('slug', 'topic_group'), name='unique_intern_slug_topic_group'), constraint=models.UniqueConstraint(
fields=("slug", "topic_group"), name="unique_intern_slug_topic_group"
),
), ),
migrations.AddConstraint( migrations.AddConstraint(
model_name='topic', model_name="topic",
constraint=models.UniqueConstraint(fields=('title', 'topic_group'), name='unique_intern_title_topic_group'), constraint=models.UniqueConstraint(
fields=("title", "topic_group"), name="unique_intern_title_topic_group"
),
), ),
migrations.AddConstraint( migrations.AddConstraint(
model_name='etherpad', model_name="etherpad",
constraint=models.UniqueConstraint(fields=('title', 'date', 'attachment'), name='unique_intern_etherpad'), constraint=models.UniqueConstraint(
fields=("title", "date", "attachment"), name="unique_intern_etherpad"
),
), ),
migrations.AddConstraint( migrations.AddConstraint(
model_name='attachment', model_name="attachment",
constraint=models.UniqueConstraint(fields=('slug', 'topic'), name='unique_intern_slug_topic'), constraint=models.UniqueConstraint(
fields=("slug", "topic"), name="unique_intern_slug_topic"
),
), ),
migrations.AddConstraint( migrations.AddConstraint(
model_name='attachment', model_name="attachment",
constraint=models.UniqueConstraint(fields=('title', 'topic'), name='unique_intern_title_topic'), constraint=models.UniqueConstraint(
fields=("title", "topic"), name="unique_intern_title_topic"
),
), ),
] ]

View File

@@ -1,117 +1,103 @@
# Generated by Django 4.0.6 on 2022-07-30 10:47 # Generated by Django 4.1.2 on 2022-12-21 11:42
import datetime import datetime
import logging
import fet2020.utils
import uuid
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import django.db.models.expressions import fet2020.utils
from django.utils.text import slugify
import time
logger = logging.getLogger(__name__)
def forwards_func(apps, schema_editor):
Tasks = apps.get_model("tasks", "Task")
past_ids=[]
for elem in Tasks.objects.all():
for i in range(4):
sid = fet2020.utils.create_random_id()
if not sid in past_ids: break
time.sleep(0.1)
elem.slug_id = sid
elem.slug = elem.slug_id + "-" + slugify(elem.title)
past_ids.append(sid)
logger.info(f"Task: {elem}")
logger.info(f"Slug ID: {elem.slug_id}")
logger.info(f"Slug: {elem.slug}")
elem.save()
TaskLists = apps.get_model("tasks", "TaskList")
for elem in TaskLists.objects.all():
elem.shortterm = slugify(elem.name)
elem.slug = slugify(elem.shortterm)
elem.save()
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('tasks', '0001_initial'), ("tasks", "0001_initial"),
] ]
operations = [ operations = [
migrations.AlterModelOptions( migrations.AlterModelOptions(
name='task', name="task",
options={'ordering': ('task_list', django.db.models.expressions.OrderBy(django.db.models.expressions.F('due_date'), descending=True, nulls_first=True)), 'verbose_name': 'Aufgabe', 'verbose_name_plural': 'Aufgaben'},
),
# remove unique=True to set value, and then set option unique=True
migrations.AddField(
model_name='task',
name='slug',
field=models.SlugField(blank=True),
),
# remove unique=True to set value, and then set option unique=True
migrations.AddField(
model_name='task',
name='slug_id',
field=models.CharField(default=fet2020.utils.create_random_id, editable=False, max_length=36),
),
# remove unique=True to set value, and then set option unique=True
migrations.AddField(
model_name='tasklist',
name='shortterm',
field=models.CharField(blank=True, max_length=128),
),
migrations.AlterField(
model_name='task',
name='title',
field=models.CharField(max_length=128, verbose_name='Titel'),
),
migrations.AlterField(
model_name='tasklist',
name='name',
field=models.CharField(max_length=128),
),
migrations.CreateModel(
name='Document',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=128, verbose_name='Titel')),
('slug_id', models.CharField(default=fet2020.utils.create_random_id, editable=False, max_length=8, unique=True)),
('etherpad_key', models.CharField(blank=True, max_length=50)),
('date', models.DateField(default=datetime.date.today, verbose_name='Datum')),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.task')),
],
options={ options={
'verbose_name': 'Dokument', "ordering": (
'verbose_name_plural': 'Dokumente', "task_list",
models.OrderBy(
models.F("due_date"), descending=True, nulls_first=True
),
),
"verbose_name": "Aufgabe",
"verbose_name_plural": "Aufgaben",
}, },
), ),
migrations.RunPython(forwards_func), migrations.AddField(
# unique=True after setting value model_name="task",
migrations.AlterField( name="slug",
model_name='task', field=models.SlugField(blank=True, null=True),
name='slug', ),
field=models.SlugField(blank=True, unique=True), migrations.AddField(
model_name="task",
name="slug_id",
field=models.CharField(
default=fet2020.utils.create_random_id,
editable=False,
max_length=8,
null=True,
),
),
migrations.AddField(
model_name="tasklist",
name="shortterm",
field=models.CharField(blank=True, max_length=128, null=True),
), ),
migrations.AlterField( migrations.AlterField(
model_name='task', model_name="task",
name='slug_id', name="title",
field=models.CharField(default=fet2020.utils.create_random_id, editable=False, max_length=36, unique=True), field=models.CharField(max_length=128, verbose_name="Titel"),
), ),
migrations.AlterField( migrations.AlterField(
model_name='tasklist', model_name="tasklist",
name='shortterm', name="name",
field=models.CharField(blank=True, max_length=128, unique=True), field=models.CharField(max_length=128),
), ),
migrations.AlterField( migrations.AlterField(
model_name='tasklist', model_name="tasklist",
name='slug', name="slug",
field=models.SlugField(blank=True, unique=True), field=models.SlugField(blank=True, null=True),
),
migrations.CreateModel(
name="Document",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=128, verbose_name="Titel")),
(
"slug_id",
models.CharField(
default=fet2020.utils.create_random_id,
editable=False,
max_length=8,
unique=True,
),
),
("etherpad_key", models.CharField(blank=True, max_length=50)),
(
"date",
models.DateField(default=datetime.date.today, verbose_name="Datum"),
),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="tasks.task"
),
),
],
options={
"verbose_name": "Dokument",
"verbose_name_plural": "Dokumente",
},
), ),
] ]

View File

@@ -0,0 +1,29 @@
# Generated by Django 4.1.2 on 2022-12-21 11:43
from django.db import migrations
import fet2020.utils
def forwards_func(apps, schema_editor):
Tasks = apps.get_model("tasks", "Task")
for elem in Tasks.objects.all():
elem.slug_id = fet2020.utils.create_random_id()
elem.slug = elem.slug_id + "-" + slugify(elem.title)
elem.save(update_fields=["slug_id", "slug"])
TaskLists = apps.get_model("tasks", "TaskList")
for elem in TaskLists.objects.all():
elem.shortterm = slugify(elem.name)
elem.slug = slugify(elem.shortterm)
elem.save(update_fields=["shortterm", "slug"])
class Migration(migrations.Migration):
dependencies = [
("tasks", "0002_alter_task_options_task_slug_task_slug_id_and_more"),
]
operations = [
migrations.RunPython(forwards_func, reverse_code=migrations.RunPython.noop),
]

View File

@@ -0,0 +1,39 @@
# Generated by Django 4.1.2 on 2022-12-21 11:43
from django.db import migrations, models
import fet2020.utils
class Migration(migrations.Migration):
dependencies = [
("tasks", "0003_populate_unique_values"),
]
operations = [
migrations.AlterField(
model_name="task",
name="slug",
field=models.SlugField(blank=True, unique=True),
),
migrations.AlterField(
model_name="task",
name="slug_id",
field=models.CharField(
default=fet2020.utils.create_random_id,
editable=False,
max_length=8,
unique=True,
),
),
migrations.AlterField(
model_name="tasklist",
name="shortterm",
field=models.CharField(blank=True, max_length=128, unique=True),
),
migrations.AlterField(
model_name="tasklist",
name="slug",
field=models.SlugField(blank=True, unique=True),
),
]