Skip to content

Commit

Permalink
refactor: Change datasets/filter/ to datasets/<pk>/filter/
Browse files Browse the repository at this point in the history
  • Loading branch information
jpmckinney committed Nov 10, 2021
1 parent 756dc39 commit 289c98a
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 43 deletions.
39 changes: 15 additions & 24 deletions backend/controller/views.py
Expand Up @@ -17,7 +17,7 @@ class CreateDatasetSerializer(serializers.Serializer):
collection_id = serializers.IntegerField(help_text="The collection ID in Kingfisher Process")


class FilterObjectSerializer(serializers.Serializer):
class FilterDatasetSerializer(serializers.Serializer):
release_date_from = serializers.CharField(required=False, help_text="The minimum release date (YYYY-MM-DD)")
release_date_to = serializers.CharField(required=False, help_text="The maximum release date (YYYY-MM-DD)")
buyer = serializers.ListField(required=False, child=serializers.CharField(), help_text="Names of buyers")
Expand All @@ -30,13 +30,6 @@ class FilterObjectSerializer(serializers.Serializer):
)


class FilterDatasetSerializer(serializers.Serializer):
dataset_id_original = serializers.IntegerField(help_text="The ID of the dataset to filter")
# Django REST Framework's auto-generated documentation does not render nested relationships.
# https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
filter_message = FilterObjectSerializer()


# https://www.django-rest-framework.org/api-guide/schemas/
# https://www.django-rest-framework.org/coreapi/schemas/
class CustomSchema(AutoSchema):
Expand Down Expand Up @@ -75,29 +68,27 @@ def create(self, request):
"""
Publishes a message to RabbitMQ to create a dataset.
"""
serializer = self.get_serializer(
data={
"name": request.data.get("name"),
"collection_id": request.data.get("collection_id"),
}
)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
publish(json.dumps(serializer.data), "ocds_kingfisher_extractor_init")
message = {
"name": serializer.data["name"],
"collection_id": serializer.data["collection_id"],
}
publish(json.dumps(message), "ocds_kingfisher_extractor_init")
return Response(status=status.HTTP_202_ACCEPTED)

@action(detail=False, methods=["post"])
def filter(self, request):
@action(detail=True, methods=["post"])
def filter(self, request, pk=None):
"""
Publishes a message to RabbitMQ to create a filtered dataset.
"""
serializer = self.get_serializer(
data={
"dataset_id_original": request.data.get("dataset_id_original"),
"filter_message": request.data.get("filter_message"),
}
)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
publish(json.dumps(serializer.data), "dataset_filter_extractor_init")
message = {
"dataset_id_original": int(pk),
"filter_message": serializer.data,
}
publish(json.dumps(message), "dataset_filter_extractor_init")
return Response(status=status.HTTP_202_ACCEPTED)

def destroy(self, request, pk=None):
Expand Down
28 changes: 21 additions & 7 deletions backend/tests/processor/test_views.py
Expand Up @@ -26,6 +26,13 @@ def create(self, model, **kwargs):
obj.save()
return obj

@patch("controller.views.publish")
def test_create_invalid(self, publish):
response = self.client.post("/datasets/", {"name": "anything", "collection_id": "xxx"}, "application/json")

self.assertEqual(response.status_code, 400)
publish.assert_not_called()

@patch("controller.views.publish")
def test_create_no_values(self, publish):
response = self.client.post("/datasets/", {}, "application/json")
Expand All @@ -36,30 +43,37 @@ def test_create_no_values(self, publish):
@patch("controller.views.publish")
def test_create(self, publish):
response = self.client.post(
"/datasets/", {"name": "anything", "collection_id": 123, "xxx": "xxx"}, "application/json"
"/datasets/", {"name": "anything", "collection_id": "123", "xxx": "xxx"}, "application/json"
)

self.assertEqual(response.status_code, 202)
publish.assert_called_once_with('{"name": "anything", "collection_id": 123}', "ocds_kingfisher_extractor_init")

@patch("controller.views.publish")
def test_filter_no_values(self, publish):
response = self.client.post("/datasets/filter/", {}, "application/json")
def test_filter_invalid(self, publish):
response = self.client.post("/datasets/123/filter/", {"buyer": "xxx"}, "application/json")

self.assertEqual(response.status_code, 400)
publish.assert_not_called()

@patch("controller.views.publish")
def test_filter(self, publish):
response = self.client.post(
"/datasets/filter/", {"dataset_id_original": 123, "filter_message": {}}, "application/json"
)
def test_filter_no_values(self, publish):
response = self.client.post("/datasets/123/filter/", {}, "application/json")

self.assertEqual(response.status_code, 202)
publish.assert_called_once_with(
'{"dataset_id_original": 123, "filter_message": {}}', "dataset_filter_extractor_init"
)

@patch("controller.views.publish")
def test_filter(self, publish):
response = self.client.post("/datasets/123/filter/", {"buyer": ["MOF"], "xxx": "xxx"}, "application/json")

self.assertEqual(response.status_code, 202)
publish.assert_called_once_with(
'{"dataset_id_original": 123, "filter_message": {"buyer": ["MOF"]}}', "dataset_filter_extractor_init"
)

@patch("controller.views.publish")
def test_destroy(self, publish):
response = self.client.delete("/datasets/123/")
Expand Down
22 changes: 11 additions & 11 deletions frontend/src/components/DatasetFilterModal.vue
Expand Up @@ -174,7 +174,10 @@ export default {
createDatasetFilter() {
this.isSubmitting = true;
axios
.post(CONFIG.apiBaseUrl + CONFIG.apiEndpoints.createDatasetFilter, this.datasetFilterMessage())
.post(
CONFIG.apiBaseUrl + CONFIG.apiEndpoints.createDatasetFilter.replace(/{id}/g, this.dataset.id),
this.datasetFilterMessage()
)
.then(response => {
if (response.status == 200) {
this.submitResult = this.$t("datasetFilter.submitResultOk");
Expand Down Expand Up @@ -229,28 +232,25 @@ export default {
return null;
}
var data = {
dataset_id_original: parseInt(this.dataset.id),
filter_message: {}
};
var data = {};
if (this.releaseDateFrom != "") {
data.filter_message.release_date_from = this.releaseDateFrom;
data.release_date_from = this.releaseDateFrom;
}
if (this.releaseDateTo != "") {
data.filter_message.release_date_to = this.releaseDateTo;
data.release_date_to = this.releaseDateTo;
}
if (this.buyerName.length > 0) {
data.filter_message.buyer = this.buyerName;
data.buyer = this.buyerName;
}
if (this.buyerNameRegex.trim() != "") {
data.filter_message.buyer_regex = this.buyerNameRegex.trim();
data.buyer_regex = this.buyerNameRegex.trim();
}
if (this.procuringEntityName.length > 0) {
data.filter_message.procuring_entity = this.procuringEntityName;
data.procuring_entity = this.procuringEntityName;
}
if (this.procuringEntityNameRegex.trim() != "") {
data.filter_message.procuring_entity_regex = this.procuringEntityNameRegex.trim();
data.procuring_entity_regex = this.procuringEntityNameRegex.trim();
}
return data;
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/config.js
Expand Up @@ -10,7 +10,7 @@ var config = {
fieldStats: "api/field_level_stats",
fieldDetail: "api/field_level_detail",
datasetDistinctValues: "api/dataset_distinct_values",
createDatasetFilter: "datasets/filter/",
createDatasetFilter: "datasets/{id}/filter/",
datasetFilterItems: "api/dataset_filter_items",
createDatasetReport: "api/generate_report"
}
Expand Down

0 comments on commit 289c98a

Please sign in to comment.