Skip to content

Commit 90a760b

Browse files
authored
Delete userfiles model and add a assets app (#195)
1 parent ba60abb commit 90a760b

File tree

8 files changed

+74
-62
lines changed

8 files changed

+74
-62
lines changed

llmstack/assets/__init__.py

Whitespace-only changes.

llmstack/assets/admin.py

Whitespace-only changes.

llmstack/assets/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class AssetsConfig(AppConfig):
5+
name = "assets"
6+
label = "assets"

llmstack/assets/models.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import base64
2+
import uuid
3+
4+
from django.db import models
5+
from django.db.models.signals import pre_delete
6+
from django.dispatch import receiver
7+
8+
9+
class Assets(models.Model):
10+
uuid = models.UUIDField(default=uuid.uuid4, editable=False, help_text="UUID of the asset")
11+
path = None
12+
file = None
13+
metadata = models.JSONField(
14+
default=dict,
15+
help_text="Metadata for the asset",
16+
null=True,
17+
blank=True,
18+
)
19+
created_at = models.DateTimeField(auto_now_add=True)
20+
21+
@classmethod
22+
def create_from_bytes(cls, file_bytes, filename, metadata=None, path=""):
23+
from django.core.files.base import ContentFile
24+
25+
asset = cls(path=path)
26+
asset.file.save(filename, ContentFile(file_bytes))
27+
bytes_size = len(file_bytes)
28+
asset.metadata = {**metadata, "file_size": bytes_size}
29+
asset.save()
30+
return asset
31+
32+
@classmethod
33+
def create_from_data_uri(cls, data_uri, metadata={}, path=""):
34+
from llmstack.common.utils.utils import validate_parse_data_uri
35+
36+
mime_type, file_name, file_data = validate_parse_data_uri(data_uri)
37+
file_bytes = base64.b64decode(file_data)
38+
return cls.create_from_bytes(
39+
file_bytes, file_name, {**metadata, "mime_type": mime_type, "file_name": file_name}, path=path
40+
)
41+
42+
class Meta:
43+
abstract = True
44+
45+
46+
@receiver(pre_delete)
47+
def delete_file_on_delete(sender, instance, **kwargs):
48+
if issubclass(sender, Assets) and instance.file:
49+
instance.file.delete(False)

llmstack/datasources/admin.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from django.contrib import admin
22

3-
from .models import DataSource, DataSourceEntry, DataSourceType, UserFiles
3+
from .models import DataSource, DataSourceEntry, DataSourceType
44

55

66
class DataSourceEntryAdmin(admin.ModelAdmin):
@@ -15,4 +15,3 @@ class DataSourceAdmin(admin.ModelAdmin):
1515
admin.site.register(DataSourceEntry, DataSourceEntryAdmin)
1616
admin.site.register(DataSourceType, DataSourceAdmin)
1717
admin.site.register(DataSource)
18-
admin.site.register(UserFiles)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Generated by Django 4.2.10 on 2024-03-21 00:01
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('datasources', '0004_alter_userfiles_user'),
10+
]
11+
12+
operations = [
13+
migrations.DeleteModel(
14+
name='UserFiles',
15+
),
16+
]

llmstack/datasources/models.py

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import base64
21
import logging
32
import uuid
43

54
from django.contrib.auth.models import User
65
from django.db import models
7-
from django.db.models.signals import pre_delete
8-
from django.dispatch import receiver
96
from django.utils.timezone import now
107

118
from llmstack.base.models import Profile
12-
from llmstack.common.utils.utils import validate_parse_data_uri
139

1410
logger = logging.getLogger(__name__)
1511

@@ -196,58 +192,3 @@ def upload_to(instance, filename):
196192
filename,
197193
]
198194
)
199-
200-
201-
class UserFiles(models.Model):
202-
uuid = models.UUIDField(default=uuid.uuid4, editable=False, help_text="UUID of the asset")
203-
user = models.ForeignKey(User, on_delete=models.DO_NOTHING, help_text="User this asset belongs to")
204-
path = ""
205-
file = models.FileField(
206-
storage=select_storage,
207-
upload_to=upload_to,
208-
null=True,
209-
blank=True,
210-
)
211-
metadata = models.JSONField(
212-
default=dict,
213-
help_text="Metadata for the asset",
214-
null=True,
215-
blank=True,
216-
)
217-
created_at = models.DateTimeField(auto_now_add=True)
218-
219-
def __init__(self, *args, path="", **kwargs) -> None:
220-
super(UserFiles, self).__init__(*args, **kwargs)
221-
self.path = path
222-
223-
@property
224-
def profile_uuid(self):
225-
return Profile.objects.get(user=self.user).uuid
226-
227-
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=""):
235-
from django.core.files.base import ContentFile
236-
237-
asset = UserFiles(user=user, path=path)
238-
asset.file.save(
239-
filename,
240-
ContentFile(file_bytes),
241-
)
242-
bytes_size = len(file_bytes)
243-
asset.metadata = {**metadata, "file_size": bytes_size}
244-
asset.save()
245-
return asset
246-
247-
248-
def create_from_data_uri(user, data_uri, metadata={}, path=""):
249-
mime_type, file_name, file_data = validate_parse_data_uri(data_uri)
250-
file_bytes = base64.b64decode(file_data)
251-
return create_from_bytes(
252-
user, file_bytes, file_name, {**metadata, "mime_type": mime_type, "file_name": file_name}, path=path
253-
)

llmstack/server/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"llmstack.connections.apps.ConnectionsConfig",
6363
"llmstack.jobs.apps.JobsConfig",
6464
"llmstack.organizations.apps.OrganizationsConfig",
65+
"llmstack.assets.apps.AssetsConfig",
6566
"flags",
6667
"allauth",
6768
"allauth.account",
@@ -208,7 +209,7 @@
208209
"base_url": GENERATEDFILES_URL,
209210
},
210211
},
211-
"useruploads": {
212+
"assets": {
212213
"BACKEND": "django.core.files.storage.FileSystemStorage",
213214
},
214215
}

0 commit comments

Comments
 (0)