diff --git a/logs_collector/collector/admin.py b/logs_collector/collector/admin.py index 08fa41a..e205677 100644 --- a/logs_collector/collector/admin.py +++ b/logs_collector/collector/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin, messages +from django.db.models import F from django.urls import reverse from django.utils.html import format_html from django.utils.translation import ngettext @@ -66,15 +67,20 @@ class ArchiveAdmin(admin.ModelAdmin): search_fields = ('ticket',) list_filter = ('time_create', 'ticket') + def get_queryset(self, request): + qs = super(ArchiveAdmin, self).get_queryset(request) + qs = qs.annotate(file_size=F('size')) + return qs + def file_size(self, obj): - return sizify(obj.file.size) + return sizify(obj.size) def file_link(self, obj): if obj.file: file_name = obj.file.name.rpartition('/')[-1] file_path = reverse( 'collector:download', - kwargs={'path': file_name} + kwargs={'path': obj.file} ) return format_html( '{file_name}', @@ -86,6 +92,7 @@ class ArchiveAdmin(admin.ModelAdmin): file_link.allow_tags = True file_link.short_description = 'File Download' + file_size.admin_order_field = 'file_size' admin.site.register(Platform, PlatformAdmin) diff --git a/logs_collector/collector/migrations/0001_initial.py b/logs_collector/collector/migrations/0001_initial.py index 80282ac..fce79fc 100644 --- a/logs_collector/collector/migrations/0001_initial.py +++ b/logs_collector/collector/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2 on 2023-08-30 05:52 +# Generated by Django 4.2 on 2023-09-02 09:30 import collector.utils from django.conf import settings @@ -47,7 +47,8 @@ class Migration(migrations.Migration): name='Archive', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('file', models.FileField(blank=True, null=True, upload_to=collector.utils.logs_dir_path)), + ('file', models.FileField(upload_to=collector.utils.logs_dir_path)), + ('size', models.BigIntegerField(editable=False)), ('md5', models.CharField(editable=False, max_length=1024)), ('time_create', models.DateTimeField(auto_now_add=True)), ('time_update', models.DateTimeField(auto_now=True)), diff --git a/logs_collector/collector/migrations/0002_alter_archive_file.py b/logs_collector/collector/migrations/0002_alter_archive_file.py deleted file mode 100644 index 8cc4cd2..0000000 --- a/logs_collector/collector/migrations/0002_alter_archive_file.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2 on 2023-08-30 08:40 - -import collector.utils -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('collector', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='archive', - name='file', - field=models.FileField(upload_to=collector.utils.logs_dir_path), - ), - ] diff --git a/logs_collector/collector/models.py b/logs_collector/collector/models.py index 4e4295f..2296cbd 100644 --- a/logs_collector/collector/models.py +++ b/logs_collector/collector/models.py @@ -11,6 +11,7 @@ from .utils import logs_dir_path class Archive(models.Model): file = models.FileField(upload_to=logs_dir_path) + size = models.BigIntegerField(editable=False) md5 = models.CharField(max_length=1024, editable=False) time_create = models.DateTimeField(auto_now_add=True) time_update = models.DateTimeField(auto_now=True) @@ -22,6 +23,8 @@ class Archive(models.Model): ) def save(self, *args, **kwargs): + # add file size in bytes + self.size = self.file.size # calculate md5 hash sum and write md5 field to db with self.file.open('rb') as f: md5 = hashlib.md5() diff --git a/logs_collector/collector/templates/collector/includes/ticket_archives.html b/logs_collector/collector/templates/collector/includes/ticket_archives.html index 4cec5ae..2e55656 100644 --- a/logs_collector/collector/templates/collector/includes/ticket_archives.html +++ b/logs_collector/collector/templates/collector/includes/ticket_archives.html @@ -19,7 +19,7 @@
Size: - {{ archive.file.size|sizify }} + {{ archive.size|filesizeformat }}
diff --git a/logs_collector/collector/templatetags/collector_extras.py b/logs_collector/collector/templatetags/collector_extras.py index c4e4d77..5665a47 100644 --- a/logs_collector/collector/templatetags/collector_extras.py +++ b/logs_collector/collector/templatetags/collector_extras.py @@ -13,31 +13,6 @@ def get_platforms(): return Platform.objects.all() -@register.filter(name='sizify') -def sizify(value: int) -> str: - """Simple kb/mb/gb size snippet for templates: - - {{ Archive.file.size|sizify }} - - Args: - value (int): size of file from Filefield - - Returns: - str: format human readable size like 4.2 Gb - """ - - if value < 512000: - value = value / 1024.0 - ext = 'Kb' - elif value < 4194304000: - value = value / 1048576.0 - ext = 'Mb' - else: - value = value / 1073741824.0 - ext = 'Gb' - return f'{round(value, 2)} {ext}' - - @register.filter(name='clean_filename') def clean_filename(filename: str) -> str: """delete prefix ticket number folder for template