Compare commits
	
		
			No commits in common. "a3d29cd86723082d3c4a9a407ab1b516a47c3716" and "332764fca237ff31db3dea7e01ce47d3f8bfdabc" have entirely different histories.
		
	
	
		
			a3d29cd867
			...
			332764fca2
		
	
		
| @ -1,5 +1,4 @@ | |||||||
| from django.contrib import admin, messages | from django.contrib import admin, messages | ||||||
| from django.db.models import F |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.utils.html import format_html | from django.utils.html import format_html | ||||||
| from django.utils.translation import ngettext | from django.utils.translation import ngettext | ||||||
| @ -67,20 +66,15 @@ class ArchiveAdmin(admin.ModelAdmin): | |||||||
|     search_fields = ('ticket',) |     search_fields = ('ticket',) | ||||||
|     list_filter = ('time_create', '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): |     def file_size(self, obj): | ||||||
|         return sizify(obj.size) |         return sizify(obj.file.size) | ||||||
| 
 | 
 | ||||||
|     def file_link(self, obj): |     def file_link(self, obj): | ||||||
|         if obj.file: |         if obj.file: | ||||||
|             file_name = obj.file.name.rpartition('/')[-1] |             file_name = obj.file.name.rpartition('/')[-1] | ||||||
|             file_path = reverse( |             file_path = reverse( | ||||||
|                 'collector:download', |                 'collector:download', | ||||||
|                 kwargs={'path': obj.file} |                 kwargs={'path': file_name} | ||||||
|             ) |             ) | ||||||
|             return format_html( |             return format_html( | ||||||
|                 '<a href="{file_path}">{file_name}</a>', |                 '<a href="{file_path}">{file_name}</a>', | ||||||
| @ -92,7 +86,6 @@ class ArchiveAdmin(admin.ModelAdmin): | |||||||
| 
 | 
 | ||||||
|     file_link.allow_tags = True |     file_link.allow_tags = True | ||||||
|     file_link.short_description = 'File Download' |     file_link.short_description = 'File Download' | ||||||
|     file_size.admin_order_field = 'file_size' |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| admin.site.register(Platform, PlatformAdmin) | admin.site.register(Platform, PlatformAdmin) | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| # Generated by Django 4.2 on 2023-09-02 09:30 | # Generated by Django 4.2 on 2023-08-30 05:52 | ||||||
| 
 | 
 | ||||||
| import collector.utils | import collector.utils | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| @ -47,8 +47,7 @@ class Migration(migrations.Migration): | |||||||
|             name='Archive', |             name='Archive', | ||||||
|             fields=[ |             fields=[ | ||||||
|                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||||
|                 ('file', models.FileField(upload_to=collector.utils.logs_dir_path)), |                 ('file', models.FileField(blank=True, null=True, upload_to=collector.utils.logs_dir_path)), | ||||||
|                 ('size', models.BigIntegerField(editable=False)), |  | ||||||
|                 ('md5', models.CharField(editable=False, max_length=1024)), |                 ('md5', models.CharField(editable=False, max_length=1024)), | ||||||
|                 ('time_create', models.DateTimeField(auto_now_add=True)), |                 ('time_create', models.DateTimeField(auto_now_add=True)), | ||||||
|                 ('time_update', models.DateTimeField(auto_now=True)), |                 ('time_update', models.DateTimeField(auto_now=True)), | ||||||
|  | |||||||
| @ -0,0 +1,19 @@ | |||||||
|  | # 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), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
| @ -11,7 +11,6 @@ from .utils import logs_dir_path | |||||||
| 
 | 
 | ||||||
| class Archive(models.Model): | class Archive(models.Model): | ||||||
|     file = models.FileField(upload_to=logs_dir_path) |     file = models.FileField(upload_to=logs_dir_path) | ||||||
|     size = models.BigIntegerField(editable=False) |  | ||||||
|     md5 = models.CharField(max_length=1024, editable=False) |     md5 = models.CharField(max_length=1024, editable=False) | ||||||
|     time_create = models.DateTimeField(auto_now_add=True) |     time_create = models.DateTimeField(auto_now_add=True) | ||||||
|     time_update = models.DateTimeField(auto_now=True) |     time_update = models.DateTimeField(auto_now=True) | ||||||
| @ -23,8 +22,6 @@ class Archive(models.Model): | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     def save(self, *args, **kwargs): |     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 |         # calculate md5 hash sum and write md5 field to db | ||||||
|         with self.file.open('rb') as f: |         with self.file.open('rb') as f: | ||||||
|             md5 = hashlib.md5() |             md5 = hashlib.md5() | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
|     <br> |     <br> | ||||||
|   <small> |   <small> | ||||||
|     <b>Size:</b> |     <b>Size:</b> | ||||||
|     <span style="word-wrap: break-word">{{ archive.size|filesizeformat }}</span> |     <span style="word-wrap: break-word">{{ archive.file.size|sizify }}</span> | ||||||
|   </small> |   </small> | ||||||
|   <div class="row"> |   <div class="row"> | ||||||
|     <div class="d-flex justify-content-sm-start justify-content-between" > |     <div class="d-flex justify-content-sm-start justify-content-between" > | ||||||
|  | |||||||
| @ -13,6 +13,31 @@ def get_platforms(): | |||||||
|     return Platform.objects.all() |     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') | @register.filter(name='clean_filename') | ||||||
| def clean_filename(filename: str) -> str: | def clean_filename(filename: str) -> str: | ||||||
|     """delete prefix ticket number folder for template |     """delete prefix ticket number folder for template | ||||||
|  | |||||||
| @ -7,11 +7,6 @@ | |||||||
| {% endblock %} | {% endblock %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <style> |  | ||||||
|   .asteriskField { |  | ||||||
|     display: none; |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| <div class="d-flex min-vh-100 align-items-center py-4" cz-shortcut-listen="true"> | <div class="d-flex min-vh-100 align-items-center py-4" cz-shortcut-listen="true"> | ||||||
|   <div class="container"> |   <div class="container"> | ||||||
|     <div class="row"> |     <div class="row"> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user