|
5 | 5 | from django.conf import settings |
6 | 6 | from django.core.exceptions import ValidationError as DjangoValidationError |
7 | 7 | from django.db import transaction |
| 8 | +from django.db.models import Q |
8 | 9 | from django.db.models.fields.files import FieldFile |
9 | 10 | from django.http import FileResponse, HttpResponse |
10 | 11 | from django.http.response import HttpResponseBase |
@@ -162,23 +163,45 @@ def download_project_file_version( |
162 | 163 | filename: str, |
163 | 164 | file_type: File.FileType, |
164 | 165 | as_attachment: bool = True, |
| 166 | + package_job_id: UUID | None = None, |
165 | 167 | ) -> HttpResponseBase: |
166 | 168 | version_id = request.GET.get("version") |
167 | 169 |
|
| 170 | + if file_type == File.FileType.PACKAGE_FILE and not package_job_id: |
| 171 | + raise Exception( |
| 172 | + f"When downloading a package file the `package_job_id` should be non-empty, but got {package_job_id=}." |
| 173 | + ) |
| 174 | + |
168 | 175 | if version_id: |
169 | | - file_version = FileVersion.objects.get( |
| 176 | + filters = Q( |
170 | 177 | id=version_id, |
171 | 178 | file__project_id=project_id, |
172 | 179 | file__name=filename, |
173 | 180 | file__file_type=file_type, |
174 | 181 | ) |
| 182 | + |
| 183 | + if package_job_id: |
| 184 | + filters &= Q( |
| 185 | + Q(file__package_job_id=package_job_id) |
| 186 | + | Q(file__file_type=File.FileType.PROJECT_FILE) |
| 187 | + ) |
| 188 | + |
| 189 | + file_version = FileVersion.objects.get(filters) |
175 | 190 | else: |
176 | | - file = File.objects.select_related("latest_version").get( |
| 191 | + filters = Q( |
177 | 192 | project_id=project_id, |
178 | 193 | name=filename, |
179 | 194 | file_type=file_type, |
180 | 195 | ) |
181 | 196 |
|
| 197 | + if package_job_id: |
| 198 | + filters &= Q( |
| 199 | + Q(package_job_id=package_job_id) |
| 200 | + | Q(file_type=File.FileType.PROJECT_FILE) |
| 201 | + ) |
| 202 | + |
| 203 | + file = File.objects.select_related("latest_version").get(filters) |
| 204 | + |
182 | 205 | assert file.latest_version |
183 | 206 |
|
184 | 207 | file_version = file.latest_version |
|
0 commit comments