55from django .conf import settings
66from django .db import transaction
77from django .utils import timezone
8+ from django .core .exceptions import ValidationError
89
910from styleguide_example .files .models import File
1011from styleguide_example .files .utils import (
1112 file_generate_upload_path ,
1213 file_generate_local_upload_url ,
13- file_generate_name
14+ file_generate_name ,
15+ bytes_to_mib
1416)
1517from styleguide_example .files .enums import FileUploadStorage
1618
1921from styleguide_example .users .models import BaseUser
2022
2123
24+ def _validate_file_size (file_obj ):
25+ max_size = settings .FILE_MAX_SIZE
26+
27+ if file_obj .size > max_size :
28+ raise ValidationError (f"File is too large. It should not exceed { bytes_to_mib (max_size )} MiB" )
29+
30+
2231class FileStandardUploadService :
2332 """
2433 This also serves as an example of a service class,
@@ -49,6 +58,8 @@ def _infer_file_name_and_type(self, file_name: str = "", file_type: str = "") ->
4958
5059 @transaction .atomic
5160 def create (self , file_name : str = "" , file_type : str = "" ) -> File :
61+ _validate_file_size (self .file_obj )
62+
5263 file_name , file_type = self ._infer_file_name_and_type (file_name , file_type )
5364
5465 obj = File (
@@ -67,6 +78,8 @@ def create(self, file_name: str = "", file_type: str = "") -> File:
6778
6879 @transaction .atomic
6980 def update (self , file : File , file_name : str = "" , file_type : str = "" ) -> File :
81+ _validate_file_size (self .file_obj )
82+
7083 file_name , file_type = self ._infer_file_name_and_type (file_name , file_type )
7184
7285 file .file = self .file_obj
@@ -138,9 +151,11 @@ def finish(self, *, file: File) -> File:
138151 return file
139152
140153 @transaction .atomic
141- def upload_local (self , * , file : File , file_object ) -> File :
154+ def upload_local (self , * , file : File , file_obj ) -> File :
155+ _validate_file_size (file_obj )
156+
142157 # Potentially, check against user
143- file .file = file_object
158+ file .file = file_obj
144159 file .full_clean ()
145160 file .save ()
146161
0 commit comments