Skip to content

Commit 6ef697c

Browse files
committed
Added views and serializers for DeltaUrl
1 parent a1fbb45 commit 6ef697c

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

sde_collections/serializers.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
DeltaIncludePattern,
1010
DeltaTitlePattern,
1111
)
12-
from .models.delta_url import DeltaUrl
12+
from .models.delta_url import CuratedUrl, DeltaUrl
1313

1414

1515
class CollectionSerializer(serializers.ModelSerializer):
@@ -94,6 +94,46 @@ class Meta:
9494
)
9595

9696

97+
class CuratedURLSerializer(serializers.ModelSerializer):
98+
excluded = serializers.BooleanField(required=False)
99+
document_type_display = serializers.CharField(source="get_document_type_display", read_only=True)
100+
division_display = serializers.CharField(source="get_division_display", read_only=True)
101+
url = serializers.CharField(required=False)
102+
generated_title_id = serializers.SerializerMethodField(read_only=True)
103+
match_pattern_type = serializers.SerializerMethodField(read_only=True)
104+
curated_urls_count = serializers.SerializerMethodField(read_only=True)
105+
106+
def get_curated_urls_count(self, obj):
107+
titlepattern = obj.deltatitlepattern_curated_urls.last()
108+
return titlepattern.curated_urls.count() if titlepattern else 0
109+
110+
def get_generated_title_id(self, obj):
111+
titlepattern = obj.deltatitlepattern_curated_urls.last()
112+
return titlepattern.id if titlepattern else None
113+
114+
def get_match_pattern_type(self, obj):
115+
titlepattern = obj.deltatitlepattern_curated_urls.last()
116+
return titlepattern.match_pattern_type if titlepattern else None
117+
118+
class Meta:
119+
model = CuratedUrl
120+
fields = (
121+
"id",
122+
"excluded",
123+
"url",
124+
"scraped_title",
125+
"generated_title",
126+
"generated_title_id",
127+
"match_pattern_type",
128+
"curated_urls_count",
129+
"document_type",
130+
"document_type_display",
131+
"division",
132+
"division_display",
133+
"visited",
134+
)
135+
136+
97137
class DeltaURLBulkCreateSerializer(serializers.ModelSerializer):
98138
class Meta:
99139
model = DeltaUrl

sde_collections/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
router.register(r"collections", views.CollectionViewSet, basename="collection")
1010
router.register(r"collections-read", views.CollectionReadViewSet, basename="collection-read")
1111
router.register(r"delta-urls", views.DeltaURLViewSet)
12+
router.register(r"curated-urls", views.CuratedURLViewSet)
1213
router.register(r"exclude-patterns", views.ExcludePatternViewSet)
1314
router.register(r"include-patterns", views.IncludePatternViewSet)
1415
router.register(r"title-patterns", views.TitlePatternViewSet)

sde_collections/views.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,16 @@
3333
DeltaIncludePattern,
3434
DeltaTitlePattern,
3535
)
36-
from .models.delta_url import DeltaResolvedTitle, DeltaResolvedTitleError, DeltaUrl
36+
from .models.delta_url import (
37+
CuratedUrl,
38+
DeltaResolvedTitle,
39+
DeltaResolvedTitleError,
40+
DeltaUrl,
41+
)
3742
from .serializers import (
3843
CollectionReadSerializer,
3944
CollectionSerializer,
45+
CuratedURLSerializer,
4046
DeltaURLAPISerializer,
4147
DeltaURLBulkCreateSerializer,
4248
DeltaURLSerializer,
@@ -284,6 +290,36 @@ def update_division(self, request, pk=None):
284290
return Response(status=status.HTTP_400_BAD_REQUEST, data={"error": "Division is required."})
285291

286292

293+
class CuratedURLViewSet(CollectionFilterMixin, viewsets.ModelViewSet):
294+
queryset = CuratedUrl.objects.all()
295+
serializer_class = CuratedURLSerializer
296+
297+
def _filter_by_is_excluded(self, queryset, is_excluded):
298+
if is_excluded == "false":
299+
queryset = queryset.filter(excluded=False)
300+
elif is_excluded == "true":
301+
queryset = queryset.exclude(excluded=False)
302+
return queryset
303+
304+
def get_queryset(self):
305+
queryset = super().get_queryset()
306+
if self.request.method == "GET":
307+
# Filter based on exclusion status
308+
is_excluded = self.request.GET.get("is_excluded")
309+
if is_excluded:
310+
queryset = self._filter_by_is_excluded(queryset, is_excluded)
311+
return queryset.order_by("url")
312+
313+
def update_division(self, request, pk=None):
314+
delta_url = get_object_or_404(CuratedUrl, pk=pk)
315+
division = request.data.get("division")
316+
if division:
317+
delta_url.division = division
318+
delta_url.save()
319+
return Response(status=status.HTTP_200_OK)
320+
return Response(status=status.HTTP_400_BAD_REQUEST, data={"error": "Division is required."})
321+
322+
287323
class DeltaURLBulkCreateView(generics.ListCreateAPIView):
288324
queryset = DeltaUrl.objects.all()
289325
serializer_class = DeltaURLBulkCreateSerializer

0 commit comments

Comments
 (0)