Skip to content

Commit

Permalink
fix(dataset): add topic filter on list
Browse files Browse the repository at this point in the history
  • Loading branch information
abulte committed Oct 20, 2023
1 parent 819f8eb commit 30a0e8a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
9 changes: 9 additions & 0 deletions udata/core/dataset/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
schema_fields,
)
from udata.linkchecker.checker import check_resource
from udata.core.topic.models import Topic
from .models import (
Dataset, Resource, Checksum, License, UPDATE_FREQUENCIES,
CommunityResource, RESOURCE_TYPES, ResourceSchema, get_resource
Expand Down Expand Up @@ -95,6 +96,7 @@ def __init__(self):
self.parser.add_argument('format', type=str, location='args')
self.parser.add_argument('schema', type=str, location='args')
self.parser.add_argument('schema_version', type=str, location='args')
self.parser.add_argument('topic', type=str, location='args')

@staticmethod
def parse_filters(datasets, args):
Expand Down Expand Up @@ -132,6 +134,13 @@ def parse_filters(datasets, args):
datasets = datasets.filter(resources__schema__name=args['schema'])
if args.get('schema_version'):
datasets = datasets.filter(resources__schema__version=args['schema_version'])
if args.get('topic'):
try:
topic = Topic.objects.get(id=args['topic'])
except Topic.DoesNotExist:
pass
else:
datasets = datasets.filter(id__in=[d.id for d in topic.datasets])
return datasets


Expand Down
14 changes: 14 additions & 0 deletions udata/tests/api/test_datasets_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
HarvestResourceMetadata, ResourceMixin)
from udata.core.organization.factories import OrganizationFactory
from udata.core.spatial.factories import SpatialCoverageFactory
from udata.core.topic.factories import TopicFactory
from udata.core.user.factories import AdminFactory, UserFactory
from udata.i18n import gettext as _
from udata.models import (LEGACY_FREQUENCIES, RESOURCE_TYPES,
Expand Down Expand Up @@ -139,6 +140,8 @@ def test_dataset_api_list_with_filters(self):
license_dataset = VisibleDatasetFactory(license=LicenseFactory(id='cc-by'))
format_dataset = DatasetFactory(resources=[ResourceFactory(format='my-format')])
featured_dataset = VisibleDatasetFactory(featured=True)
topic_dataset = VisibleDatasetFactory()
topic = TopicFactory(datasets=[topic_dataset])

paca, _, _ = create_geozones_fixtures()
geozone_dataset = VisibleDatasetFactory(spatial=SpatialCoverageFactory(zones=[paca.id]))
Expand Down Expand Up @@ -231,6 +234,17 @@ def test_dataset_api_list_with_filters(self):
self.assertEqual(len(response.json['data']), 1)
self.assertEqual(response.json['data'][0]['id'], str(schema_version2_dataset.id))

# filter on topic
response = self.get(url_for('api.datasets', topic=topic.id))
self.assert200(response)
self.assertEqual(len(response.json['data']), 1)
self.assertEqual(response.json['data'][0]['id'], str(topic_dataset.id))

# filter on non existing topic
response = self.get(url_for('api.datasets', topic=topic_dataset.id))
self.assert200(response)
self.assertTrue(len(response.json['data']) > 0)

def test_dataset_api_get(self):
'''It should fetch a dataset from the API'''
resources = [ResourceFactory() for _ in range(2)]
Expand Down

0 comments on commit 30a0e8a

Please sign in to comment.