44
55from django .contrib .auth .models import User
66from django .db import models
7+ from django .db .models .signals import pre_delete
8+ from django .dispatch import receiver
79from django .utils .timezone import now
810
911from llmstack .base .models import Profile
@@ -198,7 +200,7 @@ def upload_to(instance, filename):
198200
199201class UserFiles (models .Model ):
200202 uuid = models .UUIDField (default = uuid .uuid4 , editable = False , help_text = "UUID of the asset" )
201- user = models .OneToOneField (User , on_delete = models .DO_NOTHING , help_text = "User this asset belongs to" )
203+ user = models .ForeignKey (User , on_delete = models .DO_NOTHING , help_text = "User this asset belongs to" )
202204 path = ""
203205 file = models .FileField (
204206 storage = select_storage ,
@@ -223,10 +225,16 @@ def profile_uuid(self):
223225 return Profile .objects .get (user = self .user ).uuid
224226
225227
226- def create_from_bytes (user , file_bytes , filename , metadata = None ):
228+ @receiver (pre_delete , sender = UserFiles )
229+ def delete_file_on_delete (sender , instance , ** kwargs ):
230+ if instance .file :
231+ instance .file .delete (False )
232+
233+
234+ def create_from_bytes (user , file_bytes , filename , metadata = None , path = "" ):
227235 from django .core .files .base import ContentFile
228236
229- asset = UserFiles (user = user )
237+ asset = UserFiles (user = user , path = path )
230238 asset .file .save (
231239 filename ,
232240 ContentFile (file_bytes ),
@@ -237,7 +245,9 @@ def create_from_bytes(user, file_bytes, filename, metadata=None):
237245 return asset
238246
239247
240- def create_from_data_uri (user , data_uri , metadata = {}):
248+ def create_from_data_uri (user , data_uri , metadata = {}, path = "" ):
241249 mime_type , file_name , file_data = validate_parse_data_uri (data_uri )
242250 file_bytes = base64 .b64decode (file_data )
243- return create_from_bytes (user , file_bytes , file_name , {** metadata , "mime_type" : mime_type , "file_name" : file_name })
251+ return create_from_bytes (
252+ user , file_bytes , file_name , {** metadata , "mime_type" : mime_type , "file_name" : file_name }, path = path
253+ )
0 commit comments