@@ -134,44 +134,63 @@ def _resolve_topic_record(request):
134134 return dict (permissions = {}, record_ui = None , record = None )
135135
136136
137+ def _list_files (service , record_pid ):
138+ return service .list_files (id_ = record_pid , identity = g .identity ).to_dict ()
139+
140+
137141def _resolve_record_or_draft_files (record , request ):
138- """Resolve the record's or draft's files."""
139- if record and record ["files" ]["enabled" ]:
140- record_pid = record ["id" ]
141- is_draft = record .get ("is_draft" , False )
142+ """Resolve the record's or draft's files.
143+
144+ Returns None if the record has no files, files are disabled, or if the
145+ user doesn't have permission to access them (e.g. user-access-request
146+ where the requester can view the request but not the record's files).
147+ """
148+ if not record or not record ["files" ]["enabled" ]:
149+ return None
150+
151+ record_pid = record ["id" ]
152+ is_draft = record .get ("is_draft" , False )
153+
154+ primary_service = draft_files_service () if is_draft else files_service ()
155+ fallback_service = files_service ()
156+
157+ try :
158+ return _list_files (primary_service , record_pid )
159+ except NoResultFound :
160+ # Fallback to regular files service
142161 try :
143- if is_draft :
144- files = draft_files_service ().list_files (
145- id_ = record_pid , identity = g .identity
146- )
147- else :
148- files = files_service ().list_files (id_ = record_pid , identity = g .identity )
149- except NoResultFound :
150- files = files_service ().list_files (id_ = record_pid , identity = g .identity )
151- return files .to_dict ()
152- return None
162+ return _list_files (fallback_service , record_pid )
163+ except PermissionDeniedError :
164+ return None
165+ except PermissionDeniedError :
166+ return None
153167
154168
155169def _resolve_record_or_draft_media_files (record , request ):
156- """Resolve the record's or draft's media files."""
157- if record and record ["media_files" ]["enabled" ]:
158- record_pid = record ["id" ]
159- is_draft = record .get ("is_draft" , False )
170+ """Resolve the record's or draft's media files.
171+
172+ Returns None if the record has no media files, media files are disabled,
173+ or if the user doesn't have permission to access them (e.g. user-access-request
174+ where the requester can view the request but not the record's media files).
175+ """
176+ if not record or not record ["media_files" ]["enabled" ]:
177+ return None
178+
179+ record_pid = record ["id" ]
180+ is_draft = record .get ("is_draft" , False )
181+
182+ primary_service = draft_media_files_service () if is_draft else media_files_service ()
183+ fallback_service = media_files_service ()
184+
185+ try :
186+ return _list_files (primary_service , record_pid )
187+ except NoResultFound :
160188 try :
161- if is_draft :
162- media_files = draft_media_files_service ().list_files (
163- id_ = record_pid , identity = g .identity
164- )
165- else :
166- media_files = media_files_service ().list_files (
167- id_ = record_pid , identity = g .identity
168- )
169- except NoResultFound :
170- media_files = media_files_service ().list_files (
171- id_ = record_pid , identity = g .identity
172- )
173- return media_files .to_dict ()
174- return None
189+ return _list_files (fallback_service , record_pid )
190+ except PermissionDeniedError :
191+ return None
192+ except PermissionDeniedError :
193+ return None
175194
176195
177196@login_required
0 commit comments