Skip to content

Commit bcd4ff7

Browse files
committed
reverse relation from Folder to Realm-Models
1 parent e4883e5 commit bcd4ff7

File tree

5 files changed

+20
-19
lines changed

5 files changed

+20
-19
lines changed

finder/admin/folder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ def fetch_inodes(self, request, folder_id):
190190
def search_for_inodes(self, request, current_folder, search_query, **lookup):
191191
search_realm = request.COOKIES.get('django-finder-search-realm')
192192
if search_realm == 'everywhere':
193-
starting_folder = FolderModel.objects.get_root_folder(self.get_realm(request))
193+
starting_folder = self.get_realm(request).root_folder
194194
else:
195195
starting_folder = current_folder
196196
if isinstance(starting_folder.descendants, QuerySet):

finder/admin/inode.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,20 +88,21 @@ def serialize_inode(self, inode):
8888
return data
8989

9090
def get_realm(self, request):
91+
site = get_current_site(request)
9192
try:
92-
realm = RealmModel.objects.get(site=get_current_site(request), slug=self.admin_site.name)
93+
realm = RealmModel.objects.get(site=site, slug=self.admin_site.name)
9394
except RealmModel.DoesNotExist:
9495
root_folder = FolderModel.objects.create(owner=request.user, name='__root__')
9596
realm = RealmModel.objects.create(
96-
site=get_current_site(request),
97+
site=site,
9798
slug=self.admin_site.name,
9899
root_folder=root_folder,
99100
)
100101
return realm
101102

102103
def get_root_folder(self, request):
103104
realm = self.get_realm(request)
104-
return FolderModel.objects.get_root_folder(realm)
105+
return realm.root_folder
105106

106107
def get_trash_folder(self, request):
107108
realm = self.get_realm(request)

finder/browser/views.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,18 @@ def _get_realm(self, request, slug):
6464

6565
def structure(self, request, slug):
6666
realm = self._get_realm(request, slug)
67-
root_folder = FolderModel.objects.get_root_folder(realm)
68-
root_folder_id = str(root_folder.id)
67+
root_folder_id = str(realm.root_folder.id)
6968
request.session.setdefault('finder.open_folders', [])
7069
request.session.setdefault('finder.last_folder', root_folder_id)
71-
if is_open := root_folder.subfolders.exists():
70+
last_folder_id = request.session['finder.last_folder']
71+
if is_open := realm.root_folder.subfolders.exists():
7272
# direct children of the root folder are open regardless of the `open_folders` session
73-
children = self._get_children(request.session['finder.open_folders'], root_folder)
73+
# in addition to that, also open all ancestors of the last opened folder
74+
open_folders = set(request.session['finder.open_folders'])
75+
open_folders.update(
76+
map(str, FolderModel.objects.get(id=last_folder_id).ancestors.values_list('id', flat=True))
77+
)
78+
children = self._get_children(open_folders, realm.root_folder)
7479
else:
7580
children = None
7681
return {
@@ -172,11 +177,13 @@ def search(self, request, folder_id):
172177
offset = int(request.GET.get('offset', 0))
173178
starting_folder = FolderModel.objects.get(id=folder_id)
174179
search_realm = request.COOKIES.get('django-finder-search-realm')
175-
if search_realm == 'everywhere':
176-
starting_folder = starting_folder.ancestors[-1]
177180
if isinstance(starting_folder.descendants, QuerySet):
181+
if search_realm == 'everywhere':
182+
starting_folder = starting_folder.ancestors.last()
178183
parent_ids = Subquery(starting_folder.descendants.values('id'))
179-
else:
184+
else: # django-cte not installed (slow)
185+
if search_realm == 'everywhere':
186+
starting_folder = starting_folder.ancestors[-1]
180187
parent_ids = [descendant.id for descendant in starting_folder.descendants]
181188

182189
lookup = {

finder/management/commands/filer_to_finder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def forward(self):
3232
realm = FinderRealmModel.objects.create(site=site, slug=admin_site.name, root_folder=root_folder)
3333

3434
for filer_folder in FilerFolder.objects.filter(parent__isnull=True):
35-
self.migrate_folder(filer_folder, FinderFolder.objects.get_root_folder(realm))
35+
self.migrate_folder(filer_folder, realm.root_folder)
3636

3737
def migrate_folder(self, filer_folder, finder_parent):
3838
finder_folder = finder_parent.listdir(name=filer_folder.name, is_folder=True).first()

finder/models/folder.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@
1818

1919

2020
class FolderModelManager(InodeManagerMixin, ModelManager):
21-
def get_root_folder(self, realm):
22-
try:
23-
return realm.root_folder
24-
except FolderModel.DoesNotExist:
25-
realm.root_folder = self.create(parent=None, name='__root__')
26-
return realm.root_folder
27-
2821
def get_trash_folder(self, realm, owner):
2922
try:
3023
trash_folder = realm.trash_folders.get(owner=owner)

0 commit comments

Comments
 (0)