Skip to content

Commit e2448cf

Browse files
authored
Change model and update model util methods (#193)
1 parent 9780471 commit e2448cf

File tree

3 files changed

+53
-5
lines changed

3 files changed

+53
-5
lines changed

llmstack/common/utils/utils.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import copy
2+
import hashlib
23
import logging
34
import re
45
import time
@@ -103,6 +104,22 @@ def validate_parse_data_uri(
103104
return (mime_type, file_name, data)
104105

105106

107+
def generate_checksum(file_data, algorithm="sha256"):
108+
"""
109+
Generates a checksum of file data using the specified algorithm.
110+
111+
Parameters:
112+
file_data (bytes): The data of the file as bytes.
113+
algorithm (str): The hashing algorithm to use (default is SHA-256).
114+
115+
Returns:
116+
str: The checksum of the file data.
117+
"""
118+
checksum = hashlib.new(algorithm)
119+
checksum.update(file_data)
120+
return checksum.hexdigest()
121+
122+
106123
def sanitize_dict_values(value):
107124
if isinstance(value, dict):
108125
return {k: sanitize_dict_values(v) for k, v in value.items()}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 4.2.10 on 2024-03-17 16:02
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('datasources', '0003_userfiles'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='userfiles',
18+
name='user',
19+
field=models.ForeignKey(help_text='User this asset belongs to', on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
20+
),
21+
]

llmstack/datasources/models.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
from django.contrib.auth.models import User
66
from django.db import models
7+
from django.db.models.signals import pre_delete
8+
from django.dispatch import receiver
79
from django.utils.timezone import now
810

911
from llmstack.base.models import Profile
@@ -198,7 +200,7 @@ def upload_to(instance, filename):
198200

199201
class 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

Comments
 (0)