Skip to content

Commit 42bbd03

Browse files
committed
refactor: reusable serializer for indoe models
1 parent c2fb765 commit 42bbd03

File tree

2 files changed

+21
-34
lines changed

2 files changed

+21
-34
lines changed

finder/api/views.py

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from django.http import JsonResponse, HttpResponseBadRequest
66
from django.views import View
77

8-
from finder.models.file import AbstractFileModel
8+
from finder.models.file import FileModel
99
from finder.models.folder import FolderModel, RealmModel
10+
from finder.models.inode import InodeModel
1011
from finder.models.label import Label
1112

1213

@@ -145,17 +146,7 @@ def list(self, request, folder_id):
145146
folder = FolderModel.objects.get(id=folder_id)
146147
lookup = self.filter_lookup(request)
147148
request.session['finder.last_folder'] = str(folder_id)
148-
return {
149-
'files': [{
150-
'id': str(file.id),
151-
'name': file.name,
152-
'mime_type': file.mime_type,
153-
'browser_component': file.cast.browser_component,
154-
'thumbnail_url': file.cast.get_thumbnail_url(),
155-
'sample_url': getattr(file.cast, 'get_sample_url', lambda: None)(),
156-
'labels': file.serializable_value('labels'),
157-
} for file in folder.listdir(is_folder=False, **lookup)]
158-
}
149+
return {'files': [file.as_dict for file in folder.listdir(is_folder=False, **lookup)]}
159150

160151
def search(self, request, folder_id):
161152
"""
@@ -186,16 +177,7 @@ def search(self, request, folder_id):
186177
queryset = file_model.objects.filter(**lookup)
187178
if sorting:
188179
queryset = queryset.order_by(sorting[0])
189-
files.extend([{
190-
'id': str(file.id),
191-
'name': file.name,
192-
'mime_type': file.mime_type,
193-
'last_modified_at': file.last_modified_at,
194-
'browser_component': file.cast.browser_component,
195-
'thumbnail_url': file.cast.get_thumbnail_url(),
196-
'sample_url': getattr(file.cast, 'get_sample_url', lambda: None)(),
197-
'labels': file.serializable_value('labels'),
198-
} for file in queryset.distinct()])
180+
files.extend([file.as_dict for file in queryset.distinct()])
199181
if sorting:
200182
files.sort(key=sorting[1], reverse=sorting[2])
201183
return {'files': files}
@@ -215,15 +197,4 @@ def upload(self, request, folder_id):
215197
folder=folder,
216198
owner=request.user,
217199
)
218-
return {
219-
'uploaded_file': {
220-
'id': str(file.id),
221-
'name': file.name,
222-
'mime_type': file.mime_type,
223-
'last_modified_at': file.last_modified_at,
224-
'browser_component': file.cast.browser_component,
225-
'thumbnail_url': file.cast.get_thumbnail_url(),
226-
'sample_url': getattr(file.cast, 'get_sample_url', lambda: None)(),
227-
'labels': file.serializable_value('labels'),
228-
}
229-
}
200+
return {'uploaded_file': file.as_dict}

finder/models/file.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,22 @@ def cast(self):
162162
self.__class__ = proxy_model
163163
return self
164164

165+
@cached_property
166+
def as_dict(self):
167+
return {
168+
'id': self.id,
169+
'name': self.name,
170+
'file_name': self.file_name,
171+
'file_size': self.file_size,
172+
'sha1': self.sha1,
173+
'mime_type': self.mime_type,
174+
'last_modified_at': self.last_modified_at,
175+
'browser_component': self.cast.browser_component,
176+
'thumbnail_url': self.cast.get_thumbnail_url(),
177+
'sample_url': getattr(self.cast, 'get_sample_url', lambda: None)(),
178+
'labels': self.serializable_value('labels'),
179+
}
180+
165181
def get_download_url(self):
166182
"""
167183
Hook to return the download url for a given file.

0 commit comments

Comments
 (0)