Server side task filtering

pull/1615/head
Piero Toffanin 2025-02-19 01:45:03 +01:00
rodzic b7e1e56b01
commit 041598979d
2 zmienionych plików z 24 dodań i 6 usunięć

Wyświetl plik

@ -96,8 +96,7 @@ class TaskViewSet(viewsets.ViewSet):
parser_classes = (parsers.MultiPartParser, parsers.JSONParser, parsers.FormParser, )
ordering_fields = '__all__'
filter_fields = ('status', ) # TODO: add filter fields
def get_permissions(self):
"""
Instantiates and returns the list of permissions that this view requires.
@ -159,7 +158,26 @@ class TaskViewSet(viewsets.ViewSet):
def list(self, request, project_pk=None):
get_and_check_project(request, project_pk)
tasks = self.queryset.filter(project=project_pk)
query = {
'project': project_pk
}
status = request.query_params.get('status')
if status is not None:
try:
query['status'] = int(status)
except ValueError:
raise exceptions.ValidationError("Invalid status parameter")
available_assets = request.query_params.get('available_assets')
if available_assets is not None:
assets = [a.strip() for a in available_assets.split(",") if a.strip() != ""]
for a in assets:
query['available_assets__contains'] = "{" + a + "}"
# TODO bounding box filtering
tasks = self.queryset.filter(**query)
tasks = filters.OrderingFilter().filter_queryset(self.request, tasks, self)
serializer = TaskSerializer(tasks, many=True)
return Response(serializer.data)

Wyświetl plik

@ -76,13 +76,13 @@ class NewTaskPanel extends React.Component {
}
loadAlignTasks = (bbox) => {
// TODO: filter by status on server
// TODO: filter by bbox
this.setState({alignTasks: [], alignTo: "auto", loadingAlignTasks: true});
this.alignTasksRequest =
$.getJSON(`/api/projects/${this.props.projectId}/tasks/?ordering=-created_at`, tasks => {
$.getJSON(`/api/projects/${this.props.projectId}/tasks/?ordering=-created_at&status=${statusCodes.COMPLETED}&available_assets=georeferenced_model.laz`, tasks => {
if (Array.isArray(tasks)){
this.setState({loadingAlignTasks: false, alignTasks: tasks.filter(t => t.status === statusCodes.COMPLETED && t.available_assets.indexOf("georeferenced_model.laz") !== -1)});
this.setState({loadingAlignTasks: false, alignTasks: tasks});
}else{
this.setState({loadingAlignTasks: false});
}