Skip to content

Commit 1e8b295

Browse files
committed
New ArchiveExport model and django associated migration file.
1 parent 41e032d commit 1e8b295

2 files changed

Lines changed: 116 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Generated by Django 4.2.20 on 2025-10-06 13:35
2+
3+
import colander.core.models
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
import uuid
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
("core", "0054_alter_case_parent_case_alter_entity_thumbnail_and_more"),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name="ArchiveExport",
18+
fields=[
19+
(
20+
"id",
21+
models.UUIDField(
22+
default=uuid.uuid4,
23+
editable=False,
24+
help_text="Unique identifier.",
25+
primary_key=True,
26+
serialize=False,
27+
),
28+
),
29+
(
30+
"type",
31+
models.CharField(
32+
choices=[("UNSPECIFIED", "UNSPECIFIED"), ("CASE", "CASE")],
33+
default="UNSPECIFIED",
34+
help_text="Export type.",
35+
max_length=16,
36+
verbose_name="Export type",
37+
),
38+
),
39+
("requested_at", models.DateTimeField(auto_now_add=True, help_text="Export request date.")),
40+
("done_at", models.DateTimeField(editable=False, help_text="Export done date.")),
41+
(
42+
"file",
43+
models.FileField(
44+
blank=True, max_length=512, null=True, upload_to=colander.core.models._get_export_file_dir
45+
),
46+
),
47+
(
48+
"case",
49+
models.ForeignKey(
50+
on_delete=django.db.models.deletion.CASCADE,
51+
related_name="%(app_label)s_%(class)s_related",
52+
related_query_name="%(app_label)s_%(class)ss",
53+
to="core.case",
54+
),
55+
),
56+
],
57+
),
58+
]

colander/core/models.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ class TlpPap:
8686
(WHITE, 'WHITE'),
8787
]
8888

89+
class ExportType:
90+
UNSPECIFIED = 'UNSPECIFIED'
91+
CASE = 'CASE'
92+
EXPORT_TYPE_CHOICES = [
93+
(UNSPECIFIED, 'UNSPECIFIED'),
94+
(CASE, 'CASE'),
95+
]
8996

9097
def list_accepted_levels(input_level: str):
9198
triggered = False
@@ -2589,6 +2596,57 @@ def delete_dropped_file_stored_file(sender, instance: DroppedFile, using, **kwar
25892596
instance.file.delete()
25902597

25912598

2599+
def _get_export_file_dir(instance, filename):
2600+
case_id = instance.case.id
2601+
return f'cases/{case_id}/exports/{instance.id}'
2602+
2603+
2604+
class ArchiveExport(models.Model):
2605+
id = models.UUIDField(
2606+
primary_key=True,
2607+
default=uuid.uuid4,
2608+
help_text=_('Unique identifier.'),
2609+
editable=False
2610+
)
2611+
2612+
case = models.ForeignKey(
2613+
Case,
2614+
on_delete=models.CASCADE,
2615+
related_name="%(app_label)s_%(class)s_related",
2616+
related_query_name="%(app_label)s_%(class)ss",
2617+
)
2618+
2619+
type = models.CharField(
2620+
max_length=16,
2621+
choices=Appendix.ExportType.EXPORT_TYPE_CHOICES,
2622+
help_text=_('Export type.'),
2623+
verbose_name='Export type',
2624+
default=Appendix.ExportType.UNSPECIFIED,
2625+
)
2626+
2627+
requested_at = models.DateTimeField(
2628+
auto_now_add=True,
2629+
help_text=_('Export request date.'),
2630+
editable=False
2631+
)
2632+
2633+
done_at = models.DateTimeField(
2634+
help_text=_('Export done date.'),
2635+
editable=False
2636+
)
2637+
2638+
file = models.FileField(
2639+
upload_to=_get_export_file_dir,
2640+
max_length=512,
2641+
blank=True, null=True
2642+
)
2643+
2644+
2645+
@receiver(pre_delete, sender=ArchiveExport, dispatch_uid='delete_export_file')
2646+
def delete_dropped_file_stored_file(sender, instance: ArchiveExport, using, **kwargs):
2647+
instance.file.delete()
2648+
2649+
25922650
colander_models = CaseInsensitiveDict({
25932651
'Case': Case,
25942652
'Actor': Actor,

0 commit comments

Comments
 (0)