From 8d4d4bb3edd7bc692548bbbba525975133398a12 Mon Sep 17 00:00:00 2001 From: Johannes Schriewer Date: Wed, 16 Dec 2020 01:24:52 +0100 Subject: [PATCH] Generic cleanup, fix linter messages --- inventory/admin/containers.py | 19 +++++++++++-------- inventory/admin/distributor.py | 3 ++- inventory/admin/item.py | 3 ++- inventory/admin/layout.py | 11 +++++++---- inventory/admin/manufacturer.py | 3 ++- inventory/models/container.py | 9 +++++++-- inventory/models/distributor.py | 4 ++-- inventory/models/documentation.py | 2 +- inventory/models/item.py | 4 ++-- inventory/models/layout.py | 3 +-- inventory/views/area.py | 9 +++++++-- inventory/views/box.py | 18 ++++++++++++++---- 12 files changed, 58 insertions(+), 30 deletions(-) diff --git a/inventory/admin/containers.py b/inventory/admin/containers.py index cfab42a..fdb2121 100644 --- a/inventory/admin/containers.py +++ b/inventory/admin/containers.py @@ -1,6 +1,6 @@ -import nested_admin +from nested_admin.nested import NestedTabularInline, NestedModelAdmin, NestedStackedInline -from django.shortcuts import reverse +from django.urls import reverse from django.contrib import admin from django.conf import settings @@ -24,14 +24,15 @@ class WorkshopAdmin(admin.ModelAdmin): url = reverse('workshop-detail', kwargs={'pk': obj.id}) return settings.SERVER_URL + url -class BoxInlineAdmin(nested_admin.NestedTabularInline): + +class BoxInlineAdmin(NestedTabularInline): model = Box fk_name = 'container' extra = 1 fields = ['name', 'description', 'index', 'layout'] -class AreaAdmin(nested_admin.NestedModelAdmin): +class AreaAdmin(NestedModelAdmin): list_display = ['name', 'description', 'container'] readonly_fields = ['created_at', 'changed_at'] list_filter = ['container'] @@ -43,16 +44,18 @@ class AreaAdmin(nested_admin.NestedModelAdmin): return settings.SERVER_URL + url -class DocumentationInlineAdmin(nested_admin.NestedTabularInline): +class DocumentationInlineAdmin(NestedTabularInline): model = Documentation extra = 1 -class ItemInlineAdmin(nested_admin.NestedStackedInline): + +class ItemInlineAdmin(NestedStackedInline): model = Item extra = 1 - inlines = [DocumentationInlineAdmin] + #inlines = [DocumentationInlineAdmin] -class BoxAdmin(nested_admin.NestedModelAdmin): + +class BoxAdmin(NestedModelAdmin): list_display = ['name', 'description', 'container'] readonly_fields = ['created_at', 'changed_at'] list_filter = ['container'] diff --git a/inventory/admin/distributor.py b/inventory/admin/distributor.py index 69a45fa..2884876 100644 --- a/inventory/admin/distributor.py +++ b/inventory/admin/distributor.py @@ -1,4 +1,4 @@ -from django.shortcuts import reverse +from django.urls import reverse from django.contrib import admin from django.conf import settings @@ -13,4 +13,5 @@ class DistributorAdmin(admin.ModelAdmin): url = reverse('distributor-detail', kwargs={'pk': obj.id}) return settings.SERVER_URL + url + admin.site.register(Distributor, DistributorAdmin) diff --git a/inventory/admin/item.py b/inventory/admin/item.py index 2491daf..66f1c19 100644 --- a/inventory/admin/item.py +++ b/inventory/admin/item.py @@ -1,4 +1,4 @@ -from django.shortcuts import reverse +from django.urls import reverse from django.contrib import admin from django.conf import settings @@ -21,5 +21,6 @@ class ItemAdmin(admin.ModelAdmin): url = reverse('item-detail', kwargs={'pk': obj.id}) return settings.SERVER_URL + url + admin.site.register(Item, ItemAdmin) admin.site.register(Documentation, DocumentationAdmin) \ No newline at end of file diff --git a/inventory/admin/layout.py b/inventory/admin/layout.py index cb5a97f..895b38d 100644 --- a/inventory/admin/layout.py +++ b/inventory/admin/layout.py @@ -1,13 +1,14 @@ import json -from django.shortcuts import reverse from django.contrib import admin -from django.conf import settings - -from django.contrib.postgres.fields import JSONField +from django.db.models import JSONField from django.forms import widgets from inventory.models import Layout +from logging import getLogger + +logger = getLogger(__name__) + class PrettyJSONWidget(widgets.Textarea): @@ -30,9 +31,11 @@ class LayoutAdmin(admin.ModelAdmin): formfield_overrides = { JSONField: {'widget': PrettyJSONWidget} } + list_display = ['name', 'description'] # def view_on_site(self, obj): # url = reverse('layout-detail', kwargs={'id': obj.id}) # return settings.SERVER_URL + url + admin.site.register(Layout, LayoutAdmin) diff --git a/inventory/admin/manufacturer.py b/inventory/admin/manufacturer.py index a44293d..d83a355 100644 --- a/inventory/admin/manufacturer.py +++ b/inventory/admin/manufacturer.py @@ -1,4 +1,4 @@ -from django.shortcuts import reverse +from django.urls import reverse from django.contrib import admin from django.conf import settings @@ -13,4 +13,5 @@ class ManufacturerAdmin(admin.ModelAdmin): url = reverse('manufacturer-detail', kwargs={'pk': obj.id}) return settings.SERVER_URL + url + admin.site.register(Manufacturer, ManufacturerAdmin) diff --git a/inventory/models/container.py b/inventory/models/container.py index 933f613..629b3ca 100644 --- a/inventory/models/container.py +++ b/inventory/models/container.py @@ -10,7 +10,7 @@ class Container(models.Model): if model == Container: continue if issubclass(model, Container): - q = model.objects.filter(container_ptr_id=self.id) + q = model.objects.filter(container_ptr_id=self.pk) if q.exists(): return model, q.first() return Container, None @@ -28,7 +28,12 @@ class Container(models.Model): class CanBeContained(models.Model): - container = models.ForeignKey('inventory.Container', related_name="%(class)s_related", null=True, on_delete=models.CASCADE) + container = models.ForeignKey( + 'inventory.Container', + related_name="%(class)s_related", + null=True, + on_delete=models.CASCADE + ) index = models.PositiveIntegerField('Index of compartment in layout') class Meta: diff --git a/inventory/models/distributor.py b/inventory/models/distributor.py index c8828ee..44c6c34 100644 --- a/inventory/models/distributor.py +++ b/inventory/models/distributor.py @@ -12,6 +12,6 @@ class Distributor(models.Model): phone = models.CharField(max_length=128, null=True, blank=True) email = models.EmailField(null=True, blank=True, default=None) icon = models.ImageField(null=True, blank=True) - + def __str__(self): - return self.name \ No newline at end of file + return self.name diff --git a/inventory/models/documentation.py b/inventory/models/documentation.py index 96928d7..e78dfbc 100644 --- a/inventory/models/documentation.py +++ b/inventory/models/documentation.py @@ -8,4 +8,4 @@ class Documentation(models.Model): file = models.FileField() def __str__(self): - return self.file.name \ No newline at end of file + return self.file.name diff --git a/inventory/models/item.py b/inventory/models/item.py index 7178228..088fe9b 100644 --- a/inventory/models/item.py +++ b/inventory/models/item.py @@ -10,14 +10,14 @@ class Item(CanBeContained): created_at = models.DateTimeField(auto_now_add=True) changed_at = models.DateTimeField(auto_now=True) - metadata = JSONField('Custom metadata, used by templates', blank=True, null=True) + metadata = models.JSONField('Custom metadata, used by templates', blank=True, null=True) manufacturer = models.ForeignKey('inventory.Manufacturer', null=True, blank=True, on_delete=models.PROTECT) distributor = models.ForeignKey('inventory.Distributor', null=True, blank=True, on_delete=models.PROTECT) distributor_item_no = models.CharField(max_length=255, null=True, blank=True) price = models.DecimalField(decimal_places=3, max_digits=7, null=True, blank=True) last_ordered_on = models.DateField(null=True, blank=True) - documentation = models.ManyToManyField('inventory.Documentation') + documentation = models.ManyToManyField('inventory.Documentation', related_name='items', blank=True) def __str__(self): return self.name \ No newline at end of file diff --git a/inventory/models/layout.py b/inventory/models/layout.py index 66bf746..3bfa99c 100644 --- a/inventory/models/layout.py +++ b/inventory/models/layout.py @@ -1,5 +1,4 @@ from django.db import models -from django.contrib.postgres.fields import JSONField class Layout(models.Model): @@ -7,7 +6,7 @@ class Layout(models.Model): description = models.CharField(max_length=4096) created_at = models.DateTimeField(auto_now_add=True) changed_at = models.DateTimeField(auto_now=True) - data = JSONField() + data = models.JSONField() def __str__(self): return self.name diff --git a/inventory/views/area.py b/inventory/views/area.py index 85020ab..071aba6 100644 --- a/inventory/views/area.py +++ b/inventory/views/area.py @@ -8,10 +8,15 @@ from inventory.models import Area @method_decorator(login_required, name='dispatch') class AreaView(DetailView): context_object_name = 'area' - queryset = Area.objects.all().select_related('container', 'layout').prefetch_related('area_related', 'box_related') + queryset = Area.objects.all().select_related( + 'container', + 'layout' + ).prefetch_related( + 'area_related', + 'box_related' + ) @method_decorator(login_required, name='dispatch') class AreaListView(ListView): model = Area - diff --git a/inventory/views/box.py b/inventory/views/box.py index 5f955fb..089e7d8 100644 --- a/inventory/views/box.py +++ b/inventory/views/box.py @@ -1,6 +1,8 @@ +from typing import cast, Union from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.views.generic import ListView, DetailView +from django.db.models import QuerySet from inventory.models import Box @@ -9,9 +11,17 @@ from inventory.models import Box class BoxView(DetailView): context_object_name = 'box' template_name_field = 'template_name' - queryset = Box.objects.all().select_related('container', 'layout').prefetch_related('box_related').order_by('index', 'id') + queryset = Box.objects.all().select_related( + 'container', + 'layout' + ).prefetch_related( + 'box_related' + ).order_by( + 'index', + 'id' + ) - def layout(self, obj, layout, idx=0): + def layout(self, obj: QuerySet, layout: list[Union[list, int]], idx=0): result = [] for sublayout in layout: if isinstance(sublayout, list): @@ -28,13 +38,13 @@ class BoxView(DetailView): else: result.append({ "index": idx, - "container_id": self.object.item_related.first().container_id + "container_id": self.object.pk }) idx += 1 return result, idx def get(self, request, *args, **kwargs): - self.object = self.get_object() + self.object = cast(Box, self.get_object()) context = self.get_context_data(object=self.object) context['layouted'], _ = self.layout(self.object.item_related.all(), self.object.layout.data) return self.render_to_response(context)