diff --git a/src/apps/api/views/datasets.py b/src/apps/api/views/datasets.py index 3e2be9eee..c000278da 100644 --- a/src/apps/api/views/datasets.py +++ b/src/apps/api/views/datasets.py @@ -20,14 +20,51 @@ class DataViewSet(ModelViewSet): queryset = Data.objects.all() filter_backends = (DjangoFilterBackend, SearchFilter) - filter_fields = ('type', 'name', 'key', 'was_created_by_competition') + filter_fields = ('type', 'name', 'key', 'was_created_by_competition', 'is_public') search_fields = ('name', 'description', 'key',) pagination_class = BasicPagination def get_queryset(self): - filters = Q(is_public=True) | Q(created_by=self.request.user) - qs = Data.objects.filter(filters) + if self.request.method == 'GET': + + # new filters + # ----------- + + # _public = true if want to show public datasets/submissions + is_public = self.request.query_params.get('_public', 'false') == 'true' + + # _type = submission if called from submissions tab to filter only submissions + is_submission = self.request.query_params.get('_type', '') == 'submission' + + # _type = dataset if called from datasets and programs tab to filter datasets and programs + is_dataset = self.request.query_params.get('_type', '') == 'dataset' + + # get queryset + qs = self.queryset + + # filter submissions + if is_submission: + qs = qs.filter(Q(type=Data.SUBMISSION)) + + # filter datasets and programs + if is_dataset: + qs = qs.filter(~Q(type=Data.SUBMISSION)) + + # public filter check + if is_public: + qs = qs.filter(Q(created_by=self.request.user) | Q(is_public=True)) + else: + qs = qs.filter(Q(created_by=self.request.user)) + + # if GET is called but provided no filters, fall back to default behaviour + if (not is_submission) and (not is_dataset) and (not is_public): + qs = self.queryset + qs = qs.filter(Q(is_public=True) | Q(created_by=self.request.user)) + + else: + qs = self.queryset + qs = qs.filter(Q(is_public=True) | Q(created_by=self.request.user)) qs = qs.exclude(Q(type=Data.COMPETITION_BUNDLE) | Q(name__isnull=True)) diff --git a/src/static/riot/datasets/management.tag b/src/static/riot/datasets/management.tag index ad33b4901..3f802592e 100644 --- a/src/static/riot/datasets/management.tag +++ b/src/static/riot/datasets/management.tag @@ -14,13 +14,17 @@ +
+ + +
@@ -52,12 +56,12 @@ - -
+
@@ -276,14 +280,12 @@ self.update_datasets = function (filters) { filters = filters || {} - let show_datasets_created_by_comp = $(self.refs.auto_created).prop('checked') - if (!show_datasets_created_by_comp) { - filters.was_created_by_competition = false - } + filters.was_created_by_competition = $(self.refs.auto_created).prop('checked') + filters._public = $(self.refs.show_public).prop('checked') + filters._type = "dataset" CODALAB.api.get_datasets(filters) .done(function (data) { self.datasets = data.results - self.datasets = self.filter_out_submissions(self.datasets) self.pagination = { "count": data.count, "next": data.next, @@ -442,16 +444,6 @@ } } - // Function to remove submissions from datasets - self.filter_out_submissions = function(datasets) { - datasets_to_return = [] - datasets.forEach(dataset => { - if (dataset.type != "submission"){ - datasets_to_return.push(dataset) - } - }) - return datasets_to_return - } // Function to format file size self.format_file_size = function(file_size) { diff --git a/src/static/riot/submissions/resource_submissions.tag b/src/static/riot/submissions/resource_submissions.tag index 209567575..719676109 100644 --- a/src/static/riot/submissions/resource_submissions.tag +++ b/src/static/riot/submissions/resource_submissions.tag @@ -5,6 +5,10 @@
+
+ + +
-
+
@@ -220,10 +224,8 @@ self.pretty_date = date => luxon.DateTime.fromISO(date).toLocaleString(luxon.DateTime.DATE_FULL) self.filter = function (filters) { - let type = $(self.refs.type_filter).val() filters = filters || {} _.defaults(filters, { - type: type === '-' ? '' : type, search: $(self.refs.search).val(), page: 1, }) @@ -250,7 +252,8 @@ self.update_submissions = function (filters) { filters = filters || {} - filters.type = "submission" + filters._public = $(self.refs.show_public).prop('checked') + filters._type = "submission" CODALAB.api.get_datasets(filters) .done(function (data) { self.submissions = data.results