From 8eea8812e410666d868628f6896c505c1708a20f Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sat, 10 Aug 2024 00:12:58 +0200 Subject: [PATCH] Add more liniting rules (mostly for imports) (#7846) * remove unused imports * enable pyflake checks * various fixes * fix assert --- pyproject.toml | 2 +- src/backend/InvenTree/InvenTree/api.py | 3 --- src/backend/InvenTree/InvenTree/apps.py | 2 +- src/backend/InvenTree/InvenTree/conversion.py | 4 ++-- src/backend/InvenTree/InvenTree/exceptions.py | 1 - src/backend/InvenTree/InvenTree/helpers.py | 2 -- .../InvenTree/InvenTree/helpers_model.py | 6 ------ src/backend/InvenTree/InvenTree/models.py | 2 +- src/backend/InvenTree/InvenTree/settings.py | 3 +-- src/backend/InvenTree/InvenTree/status_codes.py | 6 +++--- src/backend/InvenTree/InvenTree/test_sso.py | 1 - src/backend/InvenTree/InvenTree/tests.py | 1 - src/backend/InvenTree/InvenTree/version.py | 2 +- src/backend/InvenTree/common/tests.py | 3 --- src/backend/InvenTree/common/validators.py | 2 +- src/backend/InvenTree/importer/admin.py | 1 - src/backend/InvenTree/machine/admin.py | 1 - src/backend/InvenTree/machine/registry.py | 4 ++-- src/backend/InvenTree/machine/tests.py | 2 +- src/backend/InvenTree/order/models.py | 1 - src/backend/InvenTree/part/api.py | 6 +++--- src/backend/InvenTree/part/stocktake.py | 1 - src/backend/InvenTree/part/test_api.py | 8 +++----- src/backend/InvenTree/part/test_bom_export.py | 17 +---------------- src/backend/InvenTree/part/test_pricing.py | 2 +- .../InvenTree/plugin/base/label/mixins.py | 2 -- src/backend/InvenTree/plugin/base/locate/api.py | 1 - .../plugin/builtin/labels/label_sheet.py | 1 - src/backend/InvenTree/plugin/registry.py | 2 +- .../samples/integration/report_plugin_sample.py | 1 - src/backend/InvenTree/plugin/staticfiles.py | 2 +- src/backend/InvenTree/report/api.py | 2 +- src/backend/InvenTree/report/models.py | 1 - src/backend/InvenTree/report/tests.py | 2 +- src/backend/InvenTree/stock/api.py | 2 -- src/backend/InvenTree/stock/filters.py | 2 -- src/backend/InvenTree/stock/generators.py | 2 -- src/backend/InvenTree/stock/models.py | 2 +- src/backend/InvenTree/users/api.py | 2 +- 39 files changed, 28 insertions(+), 79 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0946691589..a8c23e75d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ src = ["src/backend/InvenTree"] "__init__.py" = ["D104"] [tool.ruff.lint] -select = ["A", "B", "C4", "D", "I", "N"] +select = ["A", "B", "C4", "D", "I", "N", "F"] # Things that should be enabled in the future: # - LOG # - DJ # for Django stuff diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index cba3727c9e..952ddb3ff4 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -8,7 +8,6 @@ from pathlib import Path from django.conf import settings from django.db import transaction from django.http import JsonResponse -from django.urls import include, path from django.utils.translation import gettext_lazy as _ from django_q.models import OrmQ @@ -21,9 +20,7 @@ from rest_framework.views import APIView import InvenTree.version import users.models -from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ListCreateAPI -from InvenTree.permissions import RolePermission from InvenTree.templatetags.inventree_extras import plugins_info from part.models import Part from plugin.serializers import MetadataSerializer diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 0cd448361f..accd545980 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -11,7 +11,7 @@ from django.core.exceptions import AppRegistryNotReady from django.db import transaction from django.db.utils import IntegrityError, OperationalError -from allauth.socialaccount.signals import social_account_added, social_account_updated +from allauth.socialaccount.signals import social_account_updated import InvenTree.conversion import InvenTree.ready diff --git a/src/backend/InvenTree/InvenTree/conversion.py b/src/backend/InvenTree/InvenTree/conversion.py index b2d15c16df..61f1850899 100644 --- a/src/backend/InvenTree/InvenTree/conversion.py +++ b/src/backend/InvenTree/InvenTree/conversion.py @@ -153,7 +153,7 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True): if unit: try: valid = unit in ureg - except Exception as exc: + except Exception: valid = False if not valid: @@ -196,7 +196,7 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True): try: value = convert_value(attempt, unit) break - except Exception as exc: + except Exception: value = None if value is None: diff --git a/src/backend/InvenTree/InvenTree/exceptions.py b/src/backend/InvenTree/InvenTree/exceptions.py index f6fca172a3..12328994e7 100644 --- a/src/backend/InvenTree/InvenTree/exceptions.py +++ b/src/backend/InvenTree/InvenTree/exceptions.py @@ -9,7 +9,6 @@ import traceback from django.conf import settings from django.core.exceptions import ValidationError as DjangoValidationError -from django.db.utils import IntegrityError, OperationalError from django.utils.translation import gettext_lazy as _ import rest_framework.views as drfviews diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index 4558594436..63a1c43f8f 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -3,7 +3,6 @@ import datetime import hashlib import io -import json import logging import os import os.path @@ -27,7 +26,6 @@ from bleach import clean from djmoney.money import Money from PIL import Image -import InvenTree.version from common.currency import currency_code_default from .settings import MEDIA_URL, STATIC_URL diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index bf814dc12a..810c44c633 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -36,8 +36,6 @@ def get_base_url(request=None): 3. If settings.SITE_URL is set (e.g. in the Django settings), use that 4. If the InvenTree setting INVENTREE_BASE_URL is set, use that """ - import common.models - # Check if a request is provided if request: return request.build_absolute_uri('/') @@ -104,8 +102,6 @@ def download_image_from_url(remote_url, timeout=2.5): ValueError: Server responded with invalid 'Content-Length' value TypeError: Response is not a valid image """ - import common.models - # Check that the provided URL at least looks valid validator = URLValidator() validator(remote_url) @@ -203,8 +199,6 @@ def render_currency( max_decimal_places: The maximum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES setting. include_symbol: If True, include the currency symbol in the output """ - import common.models - if money in [None, '']: return '-' diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index c9f7a31253..7430ee5c9f 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -93,7 +93,7 @@ class PluginValidationMixin(DiffMixin): return except ValidationError as exc: raise exc - except Exception as exc: + except Exception: # Log the exception to the database import InvenTree.exceptions diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 0d7b306ff2..8112ea0f19 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -18,7 +18,6 @@ import django.conf.locale import django.core.exceptions from django.core.validators import URLValidator from django.http import Http404 -from django.utils.translation import gettext_lazy as _ import pytz from dotenv import load_dotenv @@ -301,7 +300,7 @@ if ( and get_boolean_setting('INVENTREE_DEBUG_SHELL', 'debug_shell', False) ): # noqa try: - import django_admin_shell + import django_admin_shell # noqa: F401 INSTALLED_APPS.append('django_admin_shell') ADMIN_SHELL_ENABLE = True diff --git a/src/backend/InvenTree/InvenTree/status_codes.py b/src/backend/InvenTree/InvenTree/status_codes.py index 81d713f59c..adb5a359d8 100644 --- a/src/backend/InvenTree/InvenTree/status_codes.py +++ b/src/backend/InvenTree/InvenTree/status_codes.py @@ -4,6 +4,6 @@ This file remains here for backwards compatibility, as external plugins may import status codes from this file. """ -from build.status_codes import * -from order.status_codes import * -from stock.status_codes import * +from build.status_codes import * # noqa: F403 +from order.status_codes import * # noqa: F403 +from stock.status_codes import * # noqa: F403 diff --git a/src/backend/InvenTree/InvenTree/test_sso.py b/src/backend/InvenTree/InvenTree/test_sso.py index 60a5619c0b..e20f11d3ae 100644 --- a/src/backend/InvenTree/InvenTree/test_sso.py +++ b/src/backend/InvenTree/InvenTree/test_sso.py @@ -9,7 +9,6 @@ from allauth.socialaccount.models import SocialAccount, SocialLogin from common.models import InvenTreeSetting from InvenTree import sso from InvenTree.forms import RegistratonMixin -from InvenTree.unit_test import InvenTreeTestCase class Dummy: diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index b4ff159c90..5f2093a8fe 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -1,6 +1,5 @@ """Test general functions and helpers.""" -import json import os import time from datetime import datetime, timedelta diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index db8c25f603..a33bec5e93 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -117,7 +117,7 @@ def inventreeDocUrl(): def inventreeAppUrl(): """Return URL for InvenTree app site.""" - return f'https://docs.inventree.org/app/' + return 'https://docs.inventree.org/app/' def inventreeCreditsUrl(): diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 0c4d236bf9..c0d46bd9c2 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -407,8 +407,6 @@ class SettingsTest(InvenTreeTestCase): @override_settings(SITE_URL=None, PLUGIN_TESTING=True, PLUGIN_TESTING_SETUP=True) def test_defaults(self): """Populate the settings with default values.""" - N = len(InvenTreeSetting.SETTINGS.keys()) - for key in InvenTreeSetting.SETTINGS.keys(): value = InvenTreeSetting.get_setting_default(key) @@ -1103,7 +1101,6 @@ class CommonTest(InvenTreeAPITestCase): def test_restart_flag(self): """Test that the restart flag is reset on start.""" - import common.models from plugin import registry # set flag true diff --git a/src/backend/InvenTree/common/validators.py b/src/backend/InvenTree/common/validators.py index c8b2b18762..efb82e692e 100644 --- a/src/backend/InvenTree/common/validators.py +++ b/src/backend/InvenTree/common/validators.py @@ -45,7 +45,7 @@ def validate_attachment_model_type(value): """Ensure that the provided attachment model is valid.""" model_names = [el[0] for el in attachment_model_options()] if value not in model_names: - raise ValidationError(f'Model type does not support attachments') + raise ValidationError('Model type does not support attachments') def validate_notes_model_type(value): diff --git a/src/backend/InvenTree/importer/admin.py b/src/backend/InvenTree/importer/admin.py index 01a12799aa..a33f2e7b50 100644 --- a/src/backend/InvenTree/importer/admin.py +++ b/src/backend/InvenTree/importer/admin.py @@ -1,7 +1,6 @@ """Admin site specification for the 'importer' app.""" from django.contrib import admin -from django.urls import path import importer.models import importer.registry diff --git a/src/backend/InvenTree/machine/admin.py b/src/backend/InvenTree/machine/admin.py index 3437c7a38a..929f913a5e 100755 --- a/src/backend/InvenTree/machine/admin.py +++ b/src/backend/InvenTree/machine/admin.py @@ -1,7 +1,6 @@ """Django admin interface for the machine app.""" from django.contrib import admin -from django.http.request import HttpRequest from machine import models diff --git a/src/backend/InvenTree/machine/registry.py b/src/backend/InvenTree/machine/registry.py index c896546c54..b9cdf1e0c9 100644 --- a/src/backend/InvenTree/machine/registry.py +++ b/src/backend/InvenTree/machine/registry.py @@ -13,7 +13,7 @@ logger = logging.getLogger('inventree') class MachineRegistry( - get_shared_class_instance_state_mixin(lambda _x: f'machine:registry') + get_shared_class_instance_state_mixin(lambda _x: 'machine:registry') ): """Machine registry class.""" @@ -44,7 +44,7 @@ class MachineRegistry( """Initialize the machine registry.""" # clear cache for machines (only needed for global redis cache) if main and hasattr(cache, 'delete_pattern'): # pragma: no cover - cache.delete_pattern(f'machine:*') + cache.delete_pattern('machine:*') self.discover_machine_types() self.discover_drivers() diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index 0293ca2bb9..6075ee7118 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -292,7 +292,7 @@ class TestLabelPrinterMachineType(TestMachineRegistryMixin, InvenTreeAPITestCase # test the single print label method calls self.assertEqual(self.print_label.call_count, 2) self.assertEqual(self.print_label.call_args.args[0], self.machine.machine) - self.assertEqual(self.print_label.call_args.args[1], label) + self.assertEqual(self.print_label.call_args.args[1], template) self.assertEqual(self.print_label.call_args.args[2], parts[1]) self.assertIn('printing_options', self.print_labels.call_args.kwargs) self.assertEqual( diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 3d2039a84c..f79c615321 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -1,7 +1,6 @@ """Order model definitions.""" import logging -import os import sys from datetime import datetime from decimal import Decimal diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 49be598d88..513048a03c 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -1126,9 +1126,9 @@ class PartFilter(rest_filters.FilterSet): # TODO: We should cache BOM checksums to make this process more efficient pks = [] - for part in queryset: - if part.is_bom_valid() == value: - pks.append(part.pk) + for item in queryset: + if item.is_bom_valid() == value: + pks.append(item.pk) return queryset.filter(pk__in=pks) diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index 3705d84ae0..b26c9a62cb 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -3,7 +3,6 @@ import io import logging import time -from datetime import datetime from django.contrib.auth.models import User from django.core.files.base import ContentFile diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 85af447556..038dc9baf6 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -4,7 +4,6 @@ import os from datetime import datetime from decimal import Decimal from enum import IntEnum -from pathlib import Path from random import randint from django.core.exceptions import ValidationError @@ -13,7 +12,6 @@ from django.test.utils import CaptureQueriesContext from django.urls import reverse import PIL -from rest_framework import status from rest_framework.test import APIClient import build.models @@ -371,7 +369,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): params['delete_parts'] = '1' if delete_child_categories: params['delete_child_categories'] = '1' - response = self.delete(url, params, expected_code=204) + self.delete(url, params, expected_code=204) if delete_parts: if i == Target.delete_subcategories_delete_parts: @@ -539,7 +537,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): ) sub4 = PartCategory.objects.create(name='sub4', parent=sub3) sub5 = PartCategory.objects.create(name='sub5', parent=sub2) - part = Part.objects.create(name='test', category=sub4) + Part.objects.create(name='test', category=sub4) PartCategory.objects.rebuild() # This query will trigger an internal server error if annotation results are not limited to 1 @@ -973,7 +971,7 @@ class PartAPITest(PartAPITestBase): """Return list of part thumbnails.""" url = reverse('api-part-thumbs') - response = self.get(url) + self.get(url) def test_paginate(self): """Test pagination of the Part list API.""" diff --git a/src/backend/InvenTree/part/test_bom_export.py b/src/backend/InvenTree/part/test_bom_export.py index 7702e94210..fc2e2ca3cf 100644 --- a/src/backend/InvenTree/part/test_bom_export.py +++ b/src/backend/InvenTree/part/test_bom_export.py @@ -151,22 +151,7 @@ class BomExportTest(InvenTreeTestCase): self.assertEqual(response.status_code, 200) content = response.headers['Content-Disposition'] - self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xls"') - - def test_export_xlsx(self): - """Test BOM download in XLSX format.""" - params = { - 'format': 'xlsx', - 'cascade': True, - 'parameter_data': True, - 'stock_data': True, - 'supplier_data': True, - 'manufacturer_data': True, - } - - response = self.client.get(self.url, data=params) - - self.assertEqual(response.status_code, 200) + self.assertEqual(content, 'attachment; filename="BOB | Bob | A2_BOM.xlsx"') def test_export_json(self): """Test BOM download in JSON format.""" diff --git a/src/backend/InvenTree/part/test_pricing.py b/src/backend/InvenTree/part/test_pricing.py index bf1b6764cc..212d086c5a 100644 --- a/src/backend/InvenTree/part/test_pricing.py +++ b/src/backend/InvenTree/part/test_pricing.py @@ -12,7 +12,7 @@ import company.models import order.models import part.models import stock.models -from common.settings import get_global_setting, set_global_setting +from common.settings import set_global_setting from InvenTree.unit_test import InvenTreeTestCase from order.status_codes import PurchaseOrderStatus diff --git a/src/backend/InvenTree/plugin/base/label/mixins.py b/src/backend/InvenTree/plugin/base/label/mixins.py index a60c1b0d71..16660dc6c3 100644 --- a/src/backend/InvenTree/plugin/base/label/mixins.py +++ b/src/backend/InvenTree/plugin/base/label/mixins.py @@ -3,8 +3,6 @@ from typing import Union from django.core.exceptions import ValidationError -from django.db.models.query import QuerySet -from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import pdf2image diff --git a/src/backend/InvenTree/plugin/base/locate/api.py b/src/backend/InvenTree/plugin/base/locate/api.py index 8d37505b3a..948d67bb61 100644 --- a/src/backend/InvenTree/plugin/base/locate/api.py +++ b/src/backend/InvenTree/plugin/base/locate/api.py @@ -1,6 +1,5 @@ """API for location plugins.""" -from drf_spectacular.utils import OpenApiResponse, extend_schema from rest_framework import permissions, serializers from rest_framework.exceptions import NotFound, ParseError from rest_framework.generics import GenericAPIView diff --git a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py index c11f06d111..c58f4d6cb2 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py +++ b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py @@ -5,7 +5,6 @@ import math from django.core.exceptions import ValidationError from django.core.files.base import ContentFile -from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ import weasyprint diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 92f72bc0f1..4b49eb5433 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -572,7 +572,7 @@ class PluginsRegistry: try: self._init_plugin(plg, plugin_configs) break - except IntegrationPluginError as error: + except IntegrationPluginError: # Error has been handled downstream pass except Exception as error: diff --git a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py index d81fcd1873..b67c8e96f1 100644 --- a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py @@ -4,7 +4,6 @@ import random from plugin import InvenTreePlugin from plugin.mixins import ReportMixin -from report.models import ReportTemplate class SampleReportPlugin(ReportMixin, InvenTreePlugin): diff --git a/src/backend/InvenTree/plugin/staticfiles.py b/src/backend/InvenTree/plugin/staticfiles.py index 6e08051fc4..0ece4bcc7e 100644 --- a/src/backend/InvenTree/plugin/staticfiles.py +++ b/src/backend/InvenTree/plugin/staticfiles.py @@ -92,4 +92,4 @@ def copy_plugin_static_files(slug, check_reload=True): logger.debug('- copied %s to %s', str(item), str(destination_path)) copied += 1 - logger.info(f"Copied %s static files for plugin '%s'.", copied, slug) + logger.info("Copied %s static files for plugin '%s'.", copied, slug) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index c4e566067b..75959557f7 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -354,7 +354,7 @@ class ReportPrint(GenericAPIView): for plugin in registry.with_mixin('report'): try: plugin.report_callback(self, instance, output, request) - except Exception as e: + except Exception: InvenTree.exceptions.log_error( f'plugins.{plugin.slug}.report_callback' ) diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 56a1ffe2fd..58cb2a0998 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -15,7 +15,6 @@ from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import gettext_lazy as _ -import common.models import InvenTree.exceptions import InvenTree.helpers import InvenTree.models diff --git a/src/backend/InvenTree/report/tests.py b/src/backend/InvenTree/report/tests.py index 68120a01a2..8f05fa0041 100644 --- a/src/backend/InvenTree/report/tests.py +++ b/src/backend/InvenTree/report/tests.py @@ -583,7 +583,7 @@ class TestReportTest(PrintTestMixins, ReportTest): InvenTreeSetting.set_setting('REPORT_ATTACH_TEST_REPORT', True, None) response = self.post( - url, {'template': report.pk, 'items': [item.pk]}, expected_code=201 + url, {'template': template.pk, 'items': [item.pk]}, expected_code=201 ) # There should be a link to the generated PDF diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index 13aea93e63..9fbf257b71 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -1,6 +1,5 @@ """JSON API for the Stock app.""" -import json from collections import OrderedDict from datetime import timedelta @@ -59,7 +58,6 @@ from order.serializers import ( ) from part.models import BomItem, Part, PartCategory from part.serializers import PartBriefSerializer -from stock.admin import LocationResource, StockItemResource from stock.generators import generate_batch_code, generate_serial_number from stock.models import ( StockItem, diff --git a/src/backend/InvenTree/stock/filters.py b/src/backend/InvenTree/stock/filters.py index 4257bd49b9..ac3098a632 100644 --- a/src/backend/InvenTree/stock/filters.py +++ b/src/backend/InvenTree/stock/filters.py @@ -3,8 +3,6 @@ from django.db.models import F, Func, IntegerField, OuterRef, Q, Subquery from django.db.models.functions import Coalesce -from sql_util.utils import SubqueryCount - import stock.models diff --git a/src/backend/InvenTree/stock/generators.py b/src/backend/InvenTree/stock/generators.py index f08ec0ab05..37accce6e7 100644 --- a/src/backend/InvenTree/stock/generators.py +++ b/src/backend/InvenTree/stock/generators.py @@ -76,8 +76,6 @@ def generate_batch_code(**kwargs): def generate_serial_number(part=None, quantity=1, **kwargs) -> str: """Generate a default 'serial number' for a new StockItem.""" - from plugin.registry import registry - quantity = quantity or 1 if part is None: diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index 35ce61a99a..de8be1ce79 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -9,7 +9,7 @@ from decimal import Decimal, InvalidOperation from django.conf import settings from django.contrib.auth.models import User -from django.core.exceptions import FieldError, ValidationError +from django.core.exceptions import ValidationError from django.core.validators import MinValueValidator from django.db import models, transaction from django.db.models import Q, Sum diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index e784f81393..c8cfb12807 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -19,7 +19,7 @@ from rest_framework import exceptions, permissions from rest_framework.authentication import BasicAuthentication from rest_framework.decorators import authentication_classes from rest_framework.generics import DestroyAPIView -from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView