Skip to content

Commit 5b8d697

Browse files
Merge pull request #835 from calumbell/833/magicitems-endpoint
[FEATURE] Added `v2/magicitems` endpoint
2 parents 3ca9d3f + d93f45e commit 5b8d697

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed

api_v2/tests/test_router.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def test_get_root_list(self):
2929
self.assertContains(response, 'publishers', count=2)
3030
self.assertContains(response, 'licenses', count=2)
3131
self.assertContains(response, 'gamesystems', count=2)
32-
self.assertContains(response, 'items', count=4) #include itemsets
32+
self.assertContains(response, 'items', count=6) #include itemsets
3333
self.assertContains(response, 'itemsets', count=2)
3434
self.assertContains(response, 'weapons', count=2)
3535
self.assertContains(response, 'armor', count=2)

api_v2/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
router = routers.DefaultRouter()
88
router.register(r'items',views.ItemViewSet)
9+
router.register(r'magicitems', views.MagicItemViewSet, basename="magicitems")
910
router.register(r'itemsets',views.ItemSetViewSet)
1011
router.register(r'itemcategories',views.ItemCategoryViewSet)
1112
router.register(r'documents',views.DocumentViewSet)

api_v2/views/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from .species import SpeciesFilterSet, SpeciesViewSet
1717

18-
from .item import ItemFilterSet, ItemViewSet
18+
from .item import ItemFilterSet, ItemViewSet, MagicItemViewSet
1919
from .item import ItemSetFilterSet, ItemSetViewSet
2020
from .item import ItemCategoryViewSet
2121
from .item import ItemRarityViewSet

api_v2/views/item.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,21 @@ class Meta:
5757
'document__gamesystem__key': ['in','iexact'],
5858
}
5959

60+
# used in ItemViewSet and MagicItemViewSet - factored out for DRYness
61+
item_prefetch_fields = [
62+
'armor',
63+
'category',
64+
'damage_immunities',
65+
'damage_resistances',
66+
'damage_vulnerabilities',
67+
'document',
68+
'weapon__properties',
69+
'weapon__damage_type',
70+
'weapon__document',
71+
'weapon__properties__property',
72+
'rarity',
73+
'size',
74+
]
6075

6176
class ItemViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
6277
"""
@@ -69,20 +84,20 @@ class ItemViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
6984
filterset_class = ItemFilterSet
7085

7186
select_related_fields = ['armor', 'weapon']
72-
prefetch_related_fields = [
73-
'armor',
74-
'category',
75-
'damage_immunities',
76-
'damage_resistances',
77-
'damage_vulnerabilities',
78-
'document',
79-
'weapon__properties',
80-
'weapon__damage_type',
81-
'weapon__document',
82-
'weapon__properties__property',
83-
'rarity',
84-
'size',
85-
]
87+
prefetch_related_fields = item_prefetch_fields
88+
89+
class MagicItemViewSet(EagerLoadingMixin, viewsets.ReadOnlyModelViewSet):
90+
"""
91+
list: API endpoint for returning a list of magic items.
92+
93+
retrieve: API endpoint for returning a particular magic item.
94+
"""
95+
queryset = models.Item.objects.filter(rarity__isnull=False).order_by('pk')
96+
serializer_class = serializers.ItemSerializer
97+
filterset_class = ItemFilterSet
98+
99+
select_related_fields = ['armor', 'weapon']
100+
prefetch_related_fields = item_prefetch_fields
86101

87102
class ItemRarityViewSet(viewsets.ReadOnlyModelViewSet):
88103
"""

0 commit comments

Comments
 (0)