mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-19 05:25:42 +00:00
Separate API views into api.py
- Web views are still in views.py - Files were getting too cluttered and hard to grok
This commit is contained in:
174
InvenTree/part/api.py
Normal file
174
InvenTree/part/api.py
Normal file
@ -0,0 +1,174 @@
|
||||
from .serializers import PartSerializer
|
||||
from .serializers import PartCategorySerializer
|
||||
|
||||
from rest_framework import generics, permissions
|
||||
|
||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||
|
||||
from .models import PartCategory, Part
|
||||
|
||||
class PartDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return detail on a single Part
|
||||
|
||||
post:
|
||||
Update data for a single Part
|
||||
|
||||
delete:
|
||||
Remove a part from the database
|
||||
|
||||
"""
|
||||
queryset = Part.objects.all()
|
||||
serializer_class = PartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
"""
|
||||
class PartParamFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = PartParameter
|
||||
fields = ['part']
|
||||
|
||||
class PartParamList(generics.ListCreateAPIView):
|
||||
"
|
||||
|
||||
get:
|
||||
Return a list of all part parameters (with optional filters)
|
||||
|
||||
post:
|
||||
Create a new part parameter
|
||||
""
|
||||
|
||||
queryset = PartParameter.objects.all()
|
||||
serializer_class = PartParameterSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = PartParamFilter
|
||||
|
||||
|
||||
class PartParamDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Detail view of a single PartParameter
|
||||
|
||||
post:
|
||||
Update data for a PartParameter
|
||||
|
||||
delete:
|
||||
Remove a PartParameter from the database
|
||||
|
||||
"
|
||||
|
||||
queryset = PartParameter.objects.all()
|
||||
serializer_class = PartParameterSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
"""
|
||||
|
||||
class PartFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Part
|
||||
fields = ['category']
|
||||
|
||||
|
||||
class PartList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
List of Parts, with optional filters
|
||||
|
||||
post:
|
||||
Create a new Part
|
||||
"""
|
||||
|
||||
queryset = Part.objects.all()
|
||||
serializer_class = PartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = PartFilter
|
||||
|
||||
|
||||
class PartCategoryDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return information on a single PartCategory
|
||||
|
||||
post:
|
||||
Update a PartCategory
|
||||
|
||||
delete:
|
||||
Remove a PartCategory
|
||||
|
||||
"""
|
||||
queryset = PartCategory.objects.all()
|
||||
serializer_class = PartCategorySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class PartCategoryList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all categories
|
||||
(with optional filters)
|
||||
|
||||
post:
|
||||
Create a new PartCategory
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
params = self.request.query_params
|
||||
|
||||
categories = PartCategory.objects.all()
|
||||
|
||||
categories = FilterChildren(categories, params.get('parent', None))
|
||||
|
||||
return categories
|
||||
|
||||
queryset = PartCategory.objects.filter(parent=None)
|
||||
serializer_class = PartCategorySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
"""
|
||||
class PartTemplateDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Return detail on a single PartParameterTemplate object
|
||||
|
||||
post:
|
||||
Update a PartParameterTemplate object
|
||||
|
||||
delete:
|
||||
Remove a PartParameterTemplate object
|
||||
|
||||
""
|
||||
|
||||
queryset = PartParameterTemplate.objects.all()
|
||||
serializer_class = PartTemplateSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class PartTemplateList(generics.ListCreateAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Return a list of all PartParameterTemplate objects
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new PartParameterTemplate object
|
||||
|
||||
""
|
||||
|
||||
queryset = PartParameterTemplate.objects.all()
|
||||
serializer_class = PartTemplateSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
"""
|
@ -6,6 +6,8 @@ from django.core.validators import MinValueValidator
|
||||
|
||||
from InvenTree.models import InvenTreeTree
|
||||
|
||||
#from django.db.models.signals.pre_delete
|
||||
#from django.dispatch import receiver
|
||||
|
||||
class PartCategory(InvenTreeTree):
|
||||
""" PartCategory provides hierarchical organization of Part objects.
|
||||
@ -19,6 +21,15 @@ class PartCategory(InvenTreeTree):
|
||||
def parts(self):
|
||||
return self.part_set.all()
|
||||
|
||||
"""
|
||||
@receiver(pre_delete, sender=PartCategory)
|
||||
def reset_tag(sender, **kwargs):
|
||||
cat = kwargs['instance']
|
||||
|
||||
for book in books.filter(tag=tag):
|
||||
book.tag = book.author.tags.first()
|
||||
book.save()
|
||||
"""
|
||||
|
||||
class Part(models.Model):
|
||||
""" Represents an abstract part
|
||||
@ -36,7 +47,9 @@ class Part(models.Model):
|
||||
IPN = models.CharField(max_length=100, blank=True)
|
||||
|
||||
# Part category - all parts must be assigned to a category
|
||||
category = models.ForeignKey(PartCategory, on_delete=models.CASCADE, related_name='parts')
|
||||
category = models.ForeignKey(PartCategory, related_name='parts',
|
||||
null=True, blank=True,
|
||||
on_delete=models.SET_NULL)
|
||||
|
||||
# Minimum "allowed" stock level
|
||||
minimum_stock = models.PositiveIntegerField(default=0, validators=[MinValueValidator(0)])
|
||||
|
@ -2,6 +2,7 @@ from django.conf.urls import url, include
|
||||
from django.views.generic.base import RedirectView
|
||||
|
||||
from . import views
|
||||
from . import api
|
||||
|
||||
app_nam='part'
|
||||
|
||||
@ -9,11 +10,11 @@ app_nam='part'
|
||||
part_cat_api_urls = [
|
||||
|
||||
# Part category detail
|
||||
url(r'^(?P<pk>[0-9]+)/?$', views.PartCategoryDetail.as_view(), name='partcategory-detail'),
|
||||
url(r'^(?P<pk>[0-9]+)/?$', api.PartCategoryDetail.as_view(), name='partcategory-detail'),
|
||||
|
||||
# List of top-level categories
|
||||
url(r'^\?*.*/?$', views.PartCategoryList.as_view()),
|
||||
url(r'^$', views.PartCategoryList.as_view())
|
||||
url(r'^\?*.*/?$', api.PartCategoryList.as_view()),
|
||||
url(r'^$', api.PartCategoryList.as_view())
|
||||
]
|
||||
|
||||
|
||||
@ -21,11 +22,11 @@ part_cat_api_urls = [
|
||||
part_api_urls = [
|
||||
|
||||
# Individual part
|
||||
url(r'^(?P<pk>[0-9]+)/?$', views.PartDetail.as_view(), name='part-detail'),
|
||||
url(r'^(?P<pk>[0-9]+)/?$', api.PartDetail.as_view(), name='part-detail'),
|
||||
|
||||
# List parts with optional filters
|
||||
url(r'^\?.*/?$', views.PartList.as_view()),
|
||||
url(r'^$', views.PartList.as_view()),
|
||||
url(r'^\?.*/?$', api.PartList.as_view()),
|
||||
url(r'^$', api.PartList.as_view()),
|
||||
]
|
||||
|
||||
part_detail_urls = [
|
||||
|
@ -1,11 +1,8 @@
|
||||
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
|
||||
|
||||
# Template stuff (WIP)
|
||||
from django.http import HttpResponse
|
||||
from django.template import loader
|
||||
|
||||
from rest_framework import generics, permissions
|
||||
|
||||
from InvenTree.models import FilterChildren
|
||||
from .models import PartCategory, Part
|
||||
|
||||
@ -14,22 +11,6 @@ from django.http import HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
from django.views import generic
|
||||
|
||||
from .serializers import PartSerializer
|
||||
from .serializers import PartCategorySerializer
|
||||
#from .serializers import PartParameterSerializer
|
||||
#from .serializers import PartTemplateSerializer
|
||||
|
||||
"""
|
||||
class IndexView(generic.ListView):
|
||||
template_name = 'index.html'
|
||||
context_object_name = 'parts'
|
||||
|
||||
def get_queryset(self):
|
||||
"Return the last five published questions."
|
||||
return Part.objects.all()
|
||||
|
||||
"""
|
||||
|
||||
def index(request):
|
||||
template = loader.get_template('part/index.html')
|
||||
|
||||
@ -79,174 +60,3 @@ def track(request, pk):
|
||||
|
||||
return render(request, 'part/track.html', {'part': part})
|
||||
|
||||
|
||||
#def results(request, question_id):
|
||||
# response = "You're looking at the results of question %s."
|
||||
# return HttpResponse(response % question_id)
|
||||
|
||||
|
||||
class PartDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return detail on a single Part
|
||||
|
||||
post:
|
||||
Update data for a single Part
|
||||
|
||||
delete:
|
||||
Remove a part from the database
|
||||
|
||||
"""
|
||||
queryset = Part.objects.all()
|
||||
serializer_class = PartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
"""
|
||||
class PartParamFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = PartParameter
|
||||
fields = ['part']
|
||||
|
||||
class PartParamList(generics.ListCreateAPIView):
|
||||
"
|
||||
|
||||
get:
|
||||
Return a list of all part parameters (with optional filters)
|
||||
|
||||
post:
|
||||
Create a new part parameter
|
||||
""
|
||||
|
||||
queryset = PartParameter.objects.all()
|
||||
serializer_class = PartParameterSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = PartParamFilter
|
||||
|
||||
|
||||
class PartParamDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Detail view of a single PartParameter
|
||||
|
||||
post:
|
||||
Update data for a PartParameter
|
||||
|
||||
delete:
|
||||
Remove a PartParameter from the database
|
||||
|
||||
"
|
||||
|
||||
queryset = PartParameter.objects.all()
|
||||
serializer_class = PartParameterSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
"""
|
||||
|
||||
class PartFilter(FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Part
|
||||
fields = ['category']
|
||||
|
||||
|
||||
class PartList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
List of Parts, with optional filters
|
||||
|
||||
post:
|
||||
Create a new Part
|
||||
"""
|
||||
|
||||
queryset = Part.objects.all()
|
||||
serializer_class = PartSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
filter_backends = (DjangoFilterBackend,)
|
||||
filter_class = PartFilter
|
||||
|
||||
|
||||
class PartCategoryDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return information on a single PartCategory
|
||||
|
||||
post:
|
||||
Update a PartCategory
|
||||
|
||||
delete:
|
||||
Remove a PartCategory
|
||||
|
||||
"""
|
||||
queryset = PartCategory.objects.all()
|
||||
serializer_class = PartCategorySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class PartCategoryList(generics.ListCreateAPIView):
|
||||
"""
|
||||
|
||||
get:
|
||||
Return a list of all categories
|
||||
(with optional filters)
|
||||
|
||||
post:
|
||||
Create a new PartCategory
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
params = self.request.query_params
|
||||
|
||||
categories = PartCategory.objects.all()
|
||||
|
||||
categories = FilterChildren(categories, params.get('parent', None))
|
||||
|
||||
return categories
|
||||
|
||||
queryset = PartCategory.objects.filter(parent=None)
|
||||
serializer_class = PartCategorySerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
"""
|
||||
class PartTemplateDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Return detail on a single PartParameterTemplate object
|
||||
|
||||
post:
|
||||
Update a PartParameterTemplate object
|
||||
|
||||
delete:
|
||||
Remove a PartParameterTemplate object
|
||||
|
||||
""
|
||||
|
||||
queryset = PartParameterTemplate.objects.all()
|
||||
serializer_class = PartTemplateSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
|
||||
class PartTemplateList(generics.ListCreateAPIView):
|
||||
""
|
||||
|
||||
get:
|
||||
Return a list of all PartParameterTemplate objects
|
||||
(with optional query filters)
|
||||
|
||||
post:
|
||||
Create a new PartParameterTemplate object
|
||||
|
||||
""
|
||||
|
||||
queryset = PartParameterTemplate.objects.all()
|
||||
serializer_class = PartTemplateSerializer
|
||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||
|
||||
"""
|
||||
|
Reference in New Issue
Block a user