resort imports

This commit is contained in:
Matthias Mair 2022-05-20 17:24:51 +02:00
parent ddc4ef3c38
commit e1d22f538d
156 changed files with 807 additions and 1042 deletions

View File

@ -2,18 +2,17 @@
Main JSON interface views
"""
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.http import JsonResponse
from django.utils.translation import gettext_lazy as _
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
from rest_framework import filters, permissions
from rest_framework import permissions
from .views import AjaxView
from .version import inventreeVersion, inventreeApiVersion, inventreeInstanceName
from .status import is_worker_running
from .version import (inventreeApiVersion, inventreeInstanceName,
inventreeVersion)
from .views import AjaxView
class InfoView(AjaxView):

View File

@ -6,9 +6,10 @@ import csv
import io
import re
from django.http.response import StreamingHttpResponse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.http.response import StreamingHttpResponse
from rest_framework.test import APITestCase

View File

@ -3,16 +3,16 @@
import logging
from django.apps import AppConfig
from django.core.exceptions import AppRegistryNotReady
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import AppRegistryNotReady
from django.db import transaction
from django.db.utils import IntegrityError
from InvenTree.ready import isInTestMode, canAppAccessDatabase
from .config import get_setting
import InvenTree.tasks
from InvenTree.ready import canAppAccessDatabase, isInTestMode
from .config import get_setting
logger = logging.getLogger("inventree")
@ -111,8 +111,8 @@ class InvenTreeConfig(AppConfig):
try:
from djmoney.contrib.exchange.models import ExchangeBackend
from InvenTree.tasks import update_exchange_rates
from common.settings import currency_code_default
from InvenTree.tasks import update_exchange_rates
except AppRegistryNotReady: # pragma: no cover
pass

View File

@ -3,12 +3,12 @@ Pull rendered copies of the templated
only used for testing the js files! - This file is omited from coverage
"""
from django.test import TestCase # pragma: no cover
from django.contrib.auth import get_user_model # pragma: no cover
import os # pragma: no cover
import pathlib # pragma: no cover
from django.contrib.auth import get_user_model # pragma: no cover
from django.test import TestCase # pragma: no cover
class RenderJavascriptFiles(TestCase): # pragma: no cover
"""

View File

@ -2,10 +2,9 @@
Helper functions for loading InvenTree configuration options
"""
import logging
import os
import shutil
import logging
logger = logging.getLogger('inventree')

View File

@ -4,12 +4,10 @@
Provides extra global data to all templates.
"""
from InvenTree.status_codes import SalesOrderStatus, PurchaseOrderStatus
from InvenTree.status_codes import BuildStatus, StockStatus
from InvenTree.status_codes import StockHistoryCode
import InvenTree.status
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
SalesOrderStatus, StockHistoryCode,
StockStatus)
from users.models import RuleSet

View File

@ -5,20 +5,19 @@ Custom exception handling for the DRF API
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import traceback
import sys
import traceback
from django.conf import settings
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils.translation import gettext_lazy as _
from django.views.debug import ExceptionReporter
import rest_framework.views as drfviews
from error_report.models import Error
from rest_framework import serializers
from rest_framework.exceptions import ValidationError as DRFValidationError
from rest_framework.response import Response
from rest_framework import serializers
import rest_framework.views as drfviews
def exception_handler(exc, context):

View File

@ -1,13 +1,14 @@
import certifi
import ssl
from urllib.error import URLError
from urllib.request import urlopen
from common.settings import currency_code_default, currency_codes
from urllib.error import URLError
from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
from django.db.utils import OperationalError
import certifi
from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
from common.settings import currency_code_default, currency_codes
class InvenTreeExchange(SimpleExchangeBackend):
"""

View File

@ -1,24 +1,22 @@
""" Custom fields used in InvenTree """
import sys
from .validators import allowable_url_schemes
from django.utils.translation import gettext_lazy as _
from django.forms.fields import URLField as FormURLField
from django.db import models as models
from django.core import validators
from django import forms
from decimal import Decimal
from djmoney.models.fields import MoneyField as ModelMoneyField
from django import forms
from django.core import validators
from django.db import models as models
from django.forms.fields import URLField as FormURLField
from django.utils.translation import gettext_lazy as _
from djmoney.forms.fields import MoneyField
from djmoney.models.fields import MoneyField as ModelMoneyField
from djmoney.models.validators import MinMoneyValidator
import InvenTree.helpers
from .validators import allowable_url_schemes
class InvenTreeURLFormField(FormURLField):
""" Custom URL form field with custom scheme validators """
@ -39,7 +37,7 @@ class InvenTreeURLField(models.URLField):
def money_kwargs():
""" returns the database settings for MoneyFields """
from common.settings import currency_code_mappings, currency_code_default
from common.settings import currency_code_default, currency_code_mappings
kwargs = {}
kwargs['currency_choices'] = currency_code_mappings()

View File

@ -2,29 +2,29 @@
Helper forms which subclass Django forms to provide additional functionality
"""
from urllib.parse import urlencode
import logging
from urllib.parse import urlencode
from django.utils.translation import gettext_lazy as _
from django import forms
from django.contrib.auth.models import User, Group
from django.conf import settings
from django.contrib.auth.models import Group, User
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field
from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton, Div
from allauth.account.forms import SignupForm, set_form_field_order
from allauth.account.adapter import DefaultAccountAdapter
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth.account.forms import SignupForm, set_form_field_order
from allauth.exceptions import ImmediateHttpResponse
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth_2fa.adapter import OTPAdapter
from allauth_2fa.utils import user_has_valid_totp_device
from crispy_forms.bootstrap import (AppendedText, Div, PrependedAppendedText,
PrependedText, StrictButton)
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Field, Layout
from part.models import PartCategory
from common.models import InvenTreeSetting
from part.models import PartCategory
logger = logging.getLogger('inventree')

View File

@ -3,27 +3,25 @@ Provides helper functions used throughout the InvenTree project
"""
import io
import re
import json
import os.path
from PIL import Image
import re
from decimal import Decimal, InvalidOperation
from wsgiref.util import FileWrapper
from django.http import StreamingHttpResponse
from django.core.exceptions import ValidationError, FieldError
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import Permission
import InvenTree.version
from common.models import InvenTreeSetting
from .settings import MEDIA_URL, STATIC_URL
from common.settings import currency_code_default
from django.core.exceptions import FieldError, ValidationError
from django.http import StreamingHttpResponse
from django.utils.translation import gettext_lazy as _
from djmoney.money import Money
from PIL import Image
import InvenTree.version
from common.models import InvenTreeSetting
from common.settings import currency_code_default
from .settings import MEDIA_URL, STATIC_URL
def getSetting(key, backup_value=None):

View File

@ -6,7 +6,6 @@ import logging
from django.core.management.base import BaseCommand
logger = logging.getLogger('inventree')

View File

@ -2,15 +2,15 @@
Custom management command to prerender files
"""
from django.core.management.base import BaseCommand
import os
from django.conf import settings
from django.core.management.base import BaseCommand
from django.http.request import HttpRequest
from django.template.loader import render_to_string
from django.utils.module_loading import import_string
from django.http.request import HttpRequest
from django.utils.translation import override as lang_over
import os
def render_file(file_name, source, target, locales, ctx):
""" renders a file into all provided locales """

View File

@ -4,19 +4,18 @@ Custom management command to rebuild thumbnail images
- May be required after importing a new dataset, for example
"""
import os
import logging
import os
from django.conf import settings
from django.core.management.base import BaseCommand
from django.db.utils import OperationalError, ProgrammingError
from PIL import UnidentifiedImageError
from django.core.management.base import BaseCommand
from django.conf import settings
from django.db.utils import OperationalError, ProgrammingError
from company.models import Company
from part.models import Part
logger = logging.getLogger('inventree')

View File

@ -2,8 +2,8 @@
Custom management command to remove MFA for a user
"""
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
class Command(BaseCommand):

View File

@ -2,13 +2,12 @@
Custom management command, wait for the database to be ready!
"""
from django.core.management.base import BaseCommand
from django.db import connection
from django.db.utils import OperationalError, ImproperlyConfigured
import time
from django.core.management.base import BaseCommand
from django.db import connection
from django.db.utils import ImproperlyConfigured, OperationalError
class Command(BaseCommand):
"""

View File

@ -1,14 +1,12 @@
import logging
from rest_framework import serializers
from rest_framework.fields import empty
from rest_framework.metadata import SimpleMetadata
from rest_framework.utils import model_meta
from rest_framework.fields import empty
from InvenTree.helpers import str2bool
import users.models
from InvenTree.helpers import str2bool
logger = logging.getLogger('inventree')

View File

@ -1,20 +1,19 @@
# -*- coding: utf-8 -*-
import logging
from django.conf import settings
from django.contrib.auth.middleware import PersistentRemoteUserMiddleware
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse_lazy, Resolver404
from django.urls import include, re_path
import logging
from django.urls import Resolver404, include, re_path, reverse_lazy
from allauth_2fa.middleware import (AllauthTwoFactorMiddleware,
BaseRequire2FAMiddleware)
from rest_framework.authtoken.models import Token
from allauth_2fa.middleware import BaseRequire2FAMiddleware, AllauthTwoFactorMiddleware
from InvenTree.urls import frontendpatterns
from common.models import InvenTreeSetting
from InvenTree.urls import frontendpatterns
logger = logging.getLogger("inventree")

View File

@ -2,27 +2,25 @@
Generic models which provide extra functionality over base Django model types.
"""
import re
import os
import logging
import os
import re
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django.utils.translation import gettext_lazy as _
from mptt.models import MPTTModel, TreeForeignKey
from mptt.exceptions import InvalidMove
from mptt.models import MPTTModel, TreeForeignKey
from InvenTree.fields import InvenTreeURLField
from InvenTree.validators import validate_tree_name
logger = logging.getLogger('inventree')

View File

@ -3,27 +3,24 @@ Serializers used in various InvenTree apps
"""
import os
import tablib
from decimal import Decimal
from collections import OrderedDict
from decimal import Decimal
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils.translation import gettext_lazy as _
from django.db import models
from django.utils.translation import gettext_lazy as _
import tablib
from djmoney.contrib.django_rest_framework.fields import MoneyField
from djmoney.money import Money
from djmoney.utils import MONEY_CLASSES, get_currency_field_name
from rest_framework import serializers
from rest_framework.utils import model_meta
from rest_framework.fields import empty
from rest_framework.exceptions import ValidationError
from rest_framework.fields import empty
from rest_framework.serializers import DecimalField
from rest_framework.utils import model_meta
from .models import extract_int

View File

@ -12,7 +12,6 @@ database setup in this file.
"""
import logging
import os
import random
import socket
@ -20,13 +19,13 @@ import string
import sys
from datetime import datetime
import moneyed
import yaml
from django.utils.translation import gettext_lazy as _
import django.conf.locale
from django.contrib.messages import constants as messages
from django.core.files.storage import default_storage
import django.conf.locale
from django.utils.translation import gettext_lazy as _
import moneyed
import yaml
from .config import get_base_dir, get_config_file, get_plugin_file, get_setting
@ -453,10 +452,8 @@ db_options = db_config.get("OPTIONS", db_config.get("options", {}))
# Specific options for postgres backend
if "postgres" in db_engine: # pragma: no cover
from psycopg2.extensions import (
ISOLATION_LEVEL_READ_COMMITTED,
ISOLATION_LEVEL_SERIALIZABLE,
)
from psycopg2.extensions import (ISOLATION_LEVEL_READ_COMMITTED,
ISOLATION_LEVEL_SERIALIZABLE)
# Connection timeout
if "connect_timeout" not in db_options:

View File

@ -3,20 +3,18 @@ Provides system status functionality checks.
"""
# -*- coding: utf-8 -*-
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
import logging
from datetime import timedelta
from django.conf import settings
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django_q.models import Success
from django_q.monitor import Stat
from django.conf import settings
import InvenTree.ready
logger = logging.getLogger("inventree")

View File

@ -1,17 +1,16 @@
import re
import json
import warnings
import requests
import logging
import re
import warnings
from datetime import timedelta
from django.utils import timezone
from django.conf import settings
from django.core import mail as django_mail
from django.core.exceptions import AppRegistryNotReady
from django.db.utils import OperationalError, ProgrammingError
from django.core import mail as django_mail
from django.conf import settings
from django.utils import timezone
import requests
logger = logging.getLogger("inventree")
@ -72,9 +71,10 @@ def offload_task(taskname, *args, force_sync=False, **kwargs):
"""
try:
import importlib
from django_q.tasks import AsyncTask
import importlib
from InvenTree.status import is_worker_running
except AppRegistryNotReady: # pragma: no cover
logger.warning(f"Could not offload task '{taskname}' - app registry not ready")
@ -254,9 +254,10 @@ def update_exchange_rates():
"""
try:
from InvenTree.exchange import InvenTreeExchange
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
from common.settings import currency_code_default, currency_codes
from InvenTree.exchange import InvenTreeExchange
except AppRegistryNotReady: # pragma: no cover
# Apps not yet loaded!
logger.info("Could not perform 'update_exchange_rates' - App registry not ready")

View File

@ -1,20 +1,17 @@
""" Low level tests for the InvenTree API """
from rest_framework import status
from django.test import TestCase
from base64 import b64encode
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from InvenTree.api_tester import InvenTreeAPITestCase
from users.models import RuleSet
from base64 import b64encode
class HTMLAPITests(TestCase):
"""

View File

@ -1,8 +1,7 @@
"""Tests for middleware functions"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse

View File

@ -4,16 +4,15 @@ Unit tests for task management
from datetime import timedelta
from django.utils import timezone
from django.test import TestCase
from django_q.models import Schedule
from django.utils import timezone
from django_q.models import Schedule
from error_report.models import Error
import InvenTree.tasks
from common.models import InvenTreeSetting
threshold = timezone.now() - timedelta(days=30)
threshold_low = threshold - timedelta(days=1)

View File

@ -2,14 +2,13 @@
Validate that all URLs specified in template files are correct.
"""
from django.test import TestCase
from django.urls import reverse
import os
import re
from pathlib import Path
from django.test import TestCase
from django.urls import reverse
class URLTest(TestCase):

View File

@ -2,12 +2,12 @@
Unit tests for the main web views
"""
import re
import os
import re
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
class ViewTests(TestCase):

View File

@ -1,33 +1,26 @@
import json
import os
import time
from decimal import Decimal
from unittest import mock
from django.test import TestCase, override_settings
import django.core.exceptions as django_exceptions
from django.core.exceptions import ValidationError
from django.contrib.auth import get_user_model
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.test import TestCase, override_settings
from djmoney.money import Money
from djmoney.contrib.exchange.models import Rate, convert_money
from djmoney.contrib.exchange.exceptions import MissingRate
from .validators import validate_overage, validate_part_name
from . import helpers
from . import version
from . import status
from . import ready
from . import config
from decimal import Decimal
from djmoney.contrib.exchange.models import Rate, convert_money
from djmoney.money import Money
import InvenTree.tasks
from stock.models import StockLocation
from common.settings import currency_codes
from common.models import InvenTreeSetting
from common.settings import currency_codes
from stock.models import StockLocation
from . import config, helpers, ready, status, version
from .validators import validate_overage, validate_part_name
class ValidatorTest(TestCase):

View File

@ -4,47 +4,41 @@ Top-level URL lookup for InvenTree application.
Passes URL lookup downstream to each app as required.
"""
from django.urls import include, path, re_path
from django.contrib import admin
from company.urls import company_urls
from company.urls import manufacturer_part_urls
from company.urls import supplier_part_urls
from common.urls import common_urls
from part.urls import part_urls
from stock.urls import stock_urls
from build.urls import build_urls
from order.urls import order_urls
from plugin.urls import get_plugin_urls
from common.api import common_api_urls, settings_api_urls
from part.api import part_api_urls, bom_api_urls
from company.api import company_api_urls
from stock.api import stock_api_urls
from build.api import build_api_urls
from order.api import order_api_urls
from label.api import label_api_urls
from report.api import report_api_urls
from plugin.api import plugin_api_urls
from users.api import user_urls
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path, re_path
from django.views.generic.base import RedirectView
from rest_framework.documentation import include_docs_urls
from .views import auth_request
from .views import IndexView, SearchView, DatabaseStatsView
from .views import SettingsView, EditUserView, SetPasswordView, CustomEmailView, CustomConnectionsView, CustomPasswordResetFromKeyView
from .views import CustomSessionDeleteView, CustomSessionDeleteOtherView
from .views import CurrencyRefreshView
from .views import AppearanceSelectView, SettingCategorySelectView
from .views import DynamicJsView
from .views import NotificationsView
from build.api import build_api_urls
from build.urls import build_urls
from common.api import common_api_urls, settings_api_urls
from common.urls import common_urls
from company.api import company_api_urls
from company.urls import (company_urls, manufacturer_part_urls,
supplier_part_urls)
from label.api import label_api_urls
from order.api import order_api_urls
from order.urls import order_urls
from part.api import bom_api_urls, part_api_urls
from part.urls import part_urls
from plugin.api import plugin_api_urls
from plugin.urls import get_plugin_urls
from report.api import report_api_urls
from stock.api import stock_api_urls
from stock.urls import stock_urls
from users.api import user_urls
from .api import InfoView, NotFoundView
from .views import (AppearanceSelectView, CurrencyRefreshView,
CustomConnectionsView, CustomEmailView,
CustomPasswordResetFromKeyView,
CustomSessionDeleteOtherView, CustomSessionDeleteView,
DatabaseStatsView, DynamicJsView, EditUserView, IndexView,
NotificationsView, SearchView, SetPasswordView,
SettingCategorySelectView, SettingsView, auth_request)
admin.site.site_header = "InvenTree Admin"

View File

@ -2,19 +2,17 @@
Custom field validators for InvenTree
"""
import re
from decimal import Decimal, InvalidOperation
from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.exceptions import FieldDoesNotExist, ValidationError
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import FieldDoesNotExist
from moneyed import CURRENCIES
import common.models
import re
def validate_currency_code(code):
"""

View File

@ -3,12 +3,12 @@ Version information for InvenTree.
Provides information on the current InvenTree version
"""
import subprocess
import django
import re
import subprocess
import django
import common.models
from InvenTree.api_version import INVENTREE_API_VERSION
# InvenTree software version

View File

@ -5,39 +5,38 @@ In particular these views provide base functionality for rendering Django forms
as JSON objects and passing them to modal forms (using jQuery / bootstrap).
"""
import os
import json
import os
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.contrib.auth.mixins import (LoginRequiredMixin,
PermissionRequiredMixin)
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import redirect
from django.template.loader import render_to_string
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
from django.urls import reverse_lazy
from django.utils.timezone import now
from django.shortcuts import redirect
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.utils.translation import gettext_lazy as _
from django.views import View
from django.views.generic import ListView, DetailView, CreateView, FormView, DeleteView, UpdateView
from django.views.generic import (CreateView, DeleteView, DetailView, FormView,
ListView, UpdateView)
from django.views.generic.base import RedirectView, TemplateView
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
from allauth.account.forms import AddEmailForm
from allauth.socialaccount.forms import DisconnectForm
from allauth.account.models import EmailAddress
from allauth.account.views import EmailView, PasswordResetFromKeyView
from allauth.socialaccount.forms import DisconnectForm
from allauth.socialaccount.views import ConnectionsView
from user_sessions.views import SessionDeleteView, SessionDeleteOtherView
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
from user_sessions.views import SessionDeleteOtherView, SessionDeleteView
from common.models import ColorTheme, InvenTreeSetting
from common.settings import currency_code_default, currency_codes
from part.models import PartCategory
from common.models import InvenTreeSetting, ColorTheme
from users.models import check_user_role, RuleSet
from users.models import RuleSet, check_user_role
from .forms import DeleteForm, EditUserForm, SetPasswordForm
from .forms import SettingCategorySelectForm
from .forms import (DeleteForm, EditUserForm, SetPasswordForm,
SettingCategorySelectForm)
from .helpers import str2bool

View File

@ -5,18 +5,16 @@ Provides a JSON API for common components.
import json
from django.http.response import HttpResponse
from django.urls import include, path, re_path
from django.utils.decorators import method_decorator
from django.urls import path
from django.views.decorators.csrf import csrf_exempt
from django.urls import include, re_path
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.exceptions import NotAcceptable, NotFound
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, generics, permissions
from rest_framework import serializers
from django_q.tasks import async_task
from rest_framework import filters, generics, permissions, serializers
from rest_framework.exceptions import NotAcceptable, NotFound
from rest_framework.response import Response
from rest_framework.views import APIView
import common.models
import common.serializers

View File

@ -4,7 +4,6 @@ import logging
from django.apps import AppConfig
logger = logging.getLogger('inventree')

View File

@ -2,12 +2,13 @@
Files management tools.
"""
from rapidfuzz import fuzz
import tablib
import os
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
import tablib
from rapidfuzz import fuzz
class FileManager:

View File

@ -3,45 +3,41 @@ Common database model definitions.
These models are 'generic' and do not fit a particular business logic object.
"""
import os
import base64
import decimal
import math
import uuid
import hashlib
import hmac
import json
import hashlib
import base64
from secrets import compare_digest
import logging
import math
import os
import uuid
from datetime import datetime, timedelta
from secrets import compare_digest
from django.apps import apps
from django.db import models, transaction
from django.db.utils import IntegrityError, OperationalError
from django.conf import settings
from django.contrib.auth.models import User, Group
from django.contrib.auth.models import Group, User
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.contrib.humanize.templatetags.humanize import naturaltime
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator, URLValidator
from django.db import models, transaction
from django.db.utils import IntegrityError, OperationalError
from django.urls import reverse
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from djmoney.settings import CURRENCY_CHOICES
from djmoney.contrib.exchange.models import convert_money
from djmoney.contrib.exchange.exceptions import MissingRate
from djmoney.contrib.exchange.models import convert_money
from djmoney.settings import CURRENCY_CHOICES
from rest_framework.exceptions import PermissionDenied
from django.utils.translation import gettext_lazy as _
from django.core.validators import MinValueValidator, URLValidator
from django.core.exceptions import ValidationError
import InvenTree.helpers
import InvenTree.fields
import InvenTree.helpers
import InvenTree.validators
import logging
logger = logging.getLogger('inventree')

View File

@ -1,13 +1,12 @@
import logging
from datetime import timedelta
from common.models import NotificationEntry, NotificationMessage
from InvenTree.helpers import inheritors
from InvenTree.ready import isImportingData
from common.models import NotificationEntry, NotificationMessage
from plugin import registry
from plugin.models import NotificationUserSetting
logger = logging.getLogger('inventree')

View File

@ -2,12 +2,12 @@
JSON serializers for common components
"""
from InvenTree.serializers import InvenTreeModelSerializer
from InvenTree.helpers import get_objectreference
from rest_framework import serializers
from common.models import InvenTreeSetting, InvenTreeUserSetting, NotificationMessage
from common.models import (InvenTreeSetting, InvenTreeUserSetting,
NotificationMessage)
from InvenTree.helpers import get_objectreference
from InvenTree.serializers import InvenTreeModelSerializer
class SettingsSerializer(InvenTreeModelSerializer):

View File

@ -2,15 +2,17 @@
User-configurable settings for the common app
"""
from moneyed import CURRENCIES
from django.conf import settings
from moneyed import CURRENCIES
def currency_code_default():
"""
Returns the default currency code (or USD if not specified)
"""
from django.db.utils import ProgrammingError
from common.models import InvenTreeSetting
try:

View File

@ -1,9 +1,8 @@
import logging
from datetime import timedelta, datetime
from datetime import datetime, timedelta
from django.core.exceptions import AppRegistryNotReady
logger = logging.getLogger('inventree')

View File

@ -1,7 +1,8 @@
from common.notifications import NotificationMethod, SingleNotificationMethod, BulkNotificationMethod, storage
from plugin.models import NotificationUserSetting
from part.test_part import BaseNotificationIntegrationTest
import plugin.templatetags.plugin_extras as plugin_tags
from common.notifications import (BulkNotificationMethod, NotificationMethod,
SingleNotificationMethod, storage)
from part.test_part import BaseNotificationIntegrationTest
from plugin.models import NotificationUserSetting
class BaseNotificationTests(BaseNotificationIntegrationTest):

View File

@ -2,9 +2,10 @@
from django.test import TestCase
from common.models import NotificationEntry
from . import tasks as common_tasks
from InvenTree.tasks import offload_task
from . import tasks as common_tasks
class TaskTest(TestCase):
"""

View File

@ -1,19 +1,20 @@
from http import HTTPStatus
import json
from datetime import timedelta
from http import HTTPStatus
from django.test import TestCase, Client
from django.contrib.auth import get_user_model
from django.test import Client, TestCase
from django.urls import reverse
from InvenTree.api_tester import InvenTreeAPITestCase
from InvenTree.helpers import str2bool
from plugin.models import NotificationUserSetting, PluginConfig
from plugin import registry
from plugin.models import NotificationUserSetting, PluginConfig
from .models import InvenTreeSetting, InvenTreeUserSetting, WebhookEndpoint, WebhookMessage, NotificationEntry, ColorTheme
from .api import WebhookView
from .models import (ColorTheme, InvenTreeSetting, InvenTreeUserSetting,
NotificationEntry, WebhookEndpoint, WebhookMessage)
CONTENT_TYPE_JSON = 'application/json'

View File

@ -4,12 +4,12 @@ Django views for interacting with common models
import os
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from django.utils.translation import gettext_lazy as _
from formtools.wizard.views import SessionWizardView
from crispy_forms.helper import FormHelper
from formtools.wizard.views import SessionWizardView
from InvenTree.views import AjaxView

View File

@ -1,17 +1,16 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from import_export.resources import ModelResource
from import_export.fields import Field
import import_export.widgets as widgets
from .models import Company
from .models import SupplierPart
from .models import SupplierPriceBreak
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
from import_export.admin import ImportExportModelAdmin
from import_export.fields import Field
from import_export.resources import ModelResource
from part.models import Part
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
ManufacturerPartParameter, SupplierPart,
SupplierPriceBreak)
class CompanyResource(ModelResource):
""" Class for managing Company data import/export """

View File

@ -2,25 +2,24 @@
Provides a JSON API for the Company app
"""
from django_filters.rest_framework import DjangoFilterBackend
from django_filters import rest_framework as rest_filters
from rest_framework import filters
from rest_framework import generics
from django.urls import include, re_path
from django.db.models import Q
from django.urls import include, re_path
from django_filters import rest_framework as rest_filters
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, generics
from InvenTree.helpers import str2bool
from InvenTree.api import AttachmentMixin
from InvenTree.helpers import str2bool
from .models import Company
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
from .models import SupplierPart, SupplierPriceBreak
from .serializers import CompanySerializer
from .serializers import ManufacturerPartSerializer, ManufacturerPartAttachmentSerializer, ManufacturerPartParameterSerializer
from .serializers import SupplierPartSerializer, SupplierPriceBreakSerializer
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
ManufacturerPartParameter, SupplierPart,
SupplierPriceBreak)
from .serializers import (CompanySerializer,
ManufacturerPartAttachmentSerializer,
ManufacturerPartParameterSerializer,
ManufacturerPartSerializer, SupplierPartSerializer,
SupplierPriceBreakSerializer)
class CompanyList(generics.ListCreateAPIView):

View File

@ -2,14 +2,13 @@
Django Forms for interacting with Company app
"""
from InvenTree.forms import HelperForm
from InvenTree.fields import RoundingDecimalFormField
from django.utils.translation import gettext_lazy as _
import django.forms
from django.utils.translation import gettext_lazy as _
from .models import Company
from .models import SupplierPriceBreak
from InvenTree.fields import RoundingDecimalFormField
from InvenTree.forms import HelperForm
from .models import Company, SupplierPriceBreak
class CompanyImageDownloadForm(HelperForm):

View File

@ -4,32 +4,26 @@ Company database model definitions
import os
from django.utils.translation import gettext_lazy as _
from django.core.validators import MinValueValidator
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Sum, Q, UniqueConstraint
from django.apps import apps
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator
from django.db import models
from django.db.models import Q, Sum, UniqueConstraint
from django.urls import reverse
from moneyed import CURRENCIES
from django.utils.translation import gettext_lazy as _
from markdownx.models import MarkdownxField
from moneyed import CURRENCIES
from stdimage.models import StdImageField
from InvenTree.helpers import getMediaUrl, getBlankImage, getBlankThumbnail
from InvenTree.fields import InvenTreeURLField
from InvenTree.models import InvenTreeAttachment
from InvenTree.status_codes import PurchaseOrderStatus
import InvenTree.validators
import common.models
import common.settings
import InvenTree.validators
from common.settings import currency_code_default
from InvenTree.fields import InvenTreeURLField
from InvenTree.helpers import getBlankImage, getBlankThumbnail, getMediaUrl
from InvenTree.models import InvenTreeAttachment
from InvenTree.status_codes import PurchaseOrderStatus
def rename_company_image(instance, filename):

View File

@ -5,22 +5,19 @@ JSON serializers for Company app
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from sql_util.utils import SubqueryCount
from InvenTree.serializers import InvenTreeAttachmentSerializer
from InvenTree.serializers import InvenTreeDecimalField
from InvenTree.serializers import InvenTreeImageSerializerField
from InvenTree.serializers import InvenTreeModelSerializer
from InvenTree.serializers import InvenTreeMoneySerializer
from common.settings import currency_code_default, currency_code_mappings
from InvenTree.serializers import (InvenTreeAttachmentSerializer,
InvenTreeDecimalField,
InvenTreeImageSerializerField,
InvenTreeModelSerializer,
InvenTreeMoneySerializer)
from part.serializers import PartBriefSerializer
from .models import Company
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
from .models import SupplierPart, SupplierPriceBreak
from common.settings import currency_code_default, currency_code_mappings
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
ManufacturerPartParameter, SupplierPart,
SupplierPriceBreak)
class CompanyBriefSerializer(InvenTreeModelSerializer):

View File

@ -1,6 +1,7 @@
from rest_framework import status
from django.urls import reverse
from rest_framework import status
from InvenTree.api_tester import InvenTreeAPITestCase
from .models import Company

View File

@ -1,9 +1,9 @@
""" Unit tests for Company views (see views.py) """
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import TestCase
from django.urls import reverse
class CompanyViewTestBase(TestCase):

View File

@ -1,13 +1,14 @@
from django.test import TestCase
from django.core.exceptions import ValidationError
import os
from decimal import Decimal
from .models import Company, Contact, ManufacturerPart, SupplierPart
from .models import rename_company_image
from django.core.exceptions import ValidationError
from django.test import TestCase
from part.models import Part
from .models import (Company, Contact, ManufacturerPart, SupplierPart,
rename_company_image)
class CompanySimpleTest(TestCase):

View File

@ -6,7 +6,6 @@ from django.urls import include, re_path
from . import views
company_detail_urls = [
re_path(r'^thumb-download/', views.CompanyImageDownloadFromURL.as_view(), name='company-image-download'),

View File

@ -2,26 +2,21 @@
Django views for interacting with Company app
"""
import io
from django.core.files.base import ContentFile
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView
from django.urls import reverse
from django.core.files.base import ContentFile
from PIL import Image
import requests
import io
from PIL import Image
from InvenTree.views import AjaxUpdateView
from InvenTree.views import InvenTreeRoleMixin
from .models import Company
from .models import ManufacturerPart
from .models import SupplierPart
from InvenTree.views import AjaxUpdateView, InvenTreeRoleMixin
from plugin.views import InvenTreePluginViewMixin
from .forms import CompanyImageDownloadForm
from plugin.views import InvenTreePluginViewMixin
from .models import Company, ManufacturerPart, SupplierPart
class CompanyIndex(InvenTreeRoleMixin, ListView):

View File

@ -1,6 +1,6 @@
from django.contrib import admin
from .models import StockItemLabel, StockLocationLabel, PartLabel
from .models import PartLabel, StockItemLabel, StockLocationLabel
class LabelAdmin(admin.ModelAdmin):

View File

@ -1,30 +1,27 @@
from io import BytesIO
from PIL import Image
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.urls import include, re_path
from django.core.exceptions import ValidationError, FieldError
from django.core.exceptions import FieldError, ValidationError
from django.http import HttpResponse, JsonResponse
from django.urls import include, re_path
from django.utils.translation import gettext_lazy as _
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics, filters
from PIL import Image
from rest_framework import filters, generics
from rest_framework.response import Response
import common.models
import InvenTree.helpers
from InvenTree.tasks import offload_task
import common.models
from plugin.registry import registry
from stock.models import StockItem, StockLocation
from part.models import Part
from plugin.base.label import label as plugin_label
from plugin.registry import registry
from stock.models import StockItem, StockLocation
from .models import StockItemLabel, StockLocationLabel, PartLabel
from .serializers import StockItemLabelSerializer, StockLocationLabelSerializer, PartLabelSerializer
from .models import PartLabel, StockItemLabel, StockLocationLabel
from .serializers import (PartLabelSerializer, StockItemLabelSerializer,
StockLocationLabelSerializer)
class LabelListView(generics.ListAPIView):

View File

@ -1,7 +1,7 @@
import hashlib
import logging
import os
import shutil
import logging
import hashlib
import warnings
from django.apps import AppConfig
@ -10,7 +10,6 @@ from django.core.exceptions import AppRegistryNotReady
from InvenTree.ready import canAppAccessDatabase
logger = logging.getLogger("inventree")

View File

@ -2,28 +2,24 @@
Label printing models
"""
import sys
import os
import logging
import datetime
import logging
import os
import sys
from django.conf import settings
from django.db import models
from django.urls import reverse
from django.core.exceptions import FieldError, ValidationError
from django.core.validators import FileExtensionValidator, MinValueValidator
from django.core.exceptions import ValidationError, FieldError
from django.template import Template, Context
from django.db import models
from django.template import Context, Template
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from InvenTree.helpers import validateFilterString, normalize
import common.models
import stock.models
import part.models
import stock.models
from InvenTree.helpers import normalize, validateFilterString
try:
from django_weasyprint import WeasyTemplateResponseMixin

View File

@ -1,7 +1,7 @@
from InvenTree.serializers import InvenTreeModelSerializer
from InvenTree.serializers import InvenTreeAttachmentSerializerField
from InvenTree.serializers import (InvenTreeAttachmentSerializerField,
InvenTreeModelSerializer)
from .models import StockItemLabel, StockLocationLabel, PartLabel
from .models import PartLabel, StockItemLabel, StockLocationLabel
class StockItemLabelSerializer(InvenTreeModelSerializer):

View File

@ -2,18 +2,18 @@
import os
from django.conf import settings
from django.apps import apps
from django.urls import reverse
from django.conf import settings
from django.core.exceptions import ValidationError
from django.urls import reverse
from InvenTree.helpers import validateFilterString
from InvenTree.api_tester import InvenTreeAPITestCase
from .models import StockItemLabel, StockLocationLabel, PartLabel
from InvenTree.helpers import validateFilterString
from part.models import Part
from stock.models import StockItem
from .models import PartLabel, StockItemLabel, StockLocationLabel
class LabelTest(InvenTreeAPITestCase):

View File

@ -1,14 +1,14 @@
from django.contrib import admin
import import_export.widgets as widgets
from import_export.admin import ImportExportModelAdmin
from import_export.fields import Field
from import_export.resources import ModelResource
import import_export.widgets as widgets
from .models import PurchaseOrder, PurchaseOrderLineItem, PurchaseOrderExtraLine
from .models import SalesOrder, SalesOrderLineItem, SalesOrderExtraLine
from .models import SalesOrderShipment, SalesOrderAllocation
from .models import (PurchaseOrder, PurchaseOrderExtraLine,
PurchaseOrderLineItem, SalesOrder, SalesOrderAllocation,
SalesOrderExtraLine, SalesOrderLineItem,
SalesOrderShipment)
# region general classes

View File

@ -2,29 +2,25 @@
JSON API for the Order app
"""
from django.db.models import F, Q
from django.urls import include, path, re_path
from django.db.models import Q, F
from django_filters import rest_framework as rest_filters
from rest_framework import generics
from rest_framework import filters, status
from rest_framework import filters, generics, status
from rest_framework.response import Response
from company.models import SupplierPart
from InvenTree.filters import InvenTreeOrderingFilter
from InvenTree.helpers import str2bool, DownloadFile
from InvenTree.api import AttachmentMixin, APIDownloadMixin
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from order.admin import PurchaseOrderResource, PurchaseOrderLineItemResource
from order.admin import SalesOrderResource
import order.models as models
import order.serializers as serializers
from company.models import SupplierPart
from InvenTree.api import APIDownloadMixin, AttachmentMixin
from InvenTree.filters import InvenTreeOrderingFilter
from InvenTree.helpers import DownloadFile, str2bool
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from order.admin import (PurchaseOrderLineItemResource, PurchaseOrderResource,
SalesOrderResource)
from part.models import Part
from users.models import Owner
from plugin.serializers import MetadataSerializer
from users.models import Owner
class GeneralExtraLineList:

View File

@ -5,11 +5,9 @@ Django Forms for interacting with Order objects
from django import forms
from django.utils.translation import gettext_lazy as _
from InvenTree.fields import InvenTreeMoneyField
from InvenTree.helpers import clean_decimal
from common.forms import MatchItemForm
from InvenTree.fields import InvenTreeMoneyField
from InvenTree.helpers import clean_decimal
class OrderMatchItemForm(MatchItemForm):

View File

@ -5,42 +5,38 @@ Order model definitions
# -*- coding: utf-8 -*-
import os
from datetime import datetime
from decimal import Decimal
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator
from django.db import models, transaction
from django.db.models import Q, F, Sum
from django.db.models import F, Q, Sum
from django.db.models.functions import Coalesce
from django.db.models.signals import post_save
from django.dispatch.dispatcher import receiver
from django.core.validators import MinValueValidator
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from djmoney.contrib.exchange.models import convert_money
from djmoney.money import Money
from markdownx.models import MarkdownxField
from mptt.models import TreeForeignKey
from djmoney.contrib.exchange.models import convert_money
from djmoney.money import Money
import InvenTree.helpers
from common.settings import currency_code_default
from users import models as UserModels
from part import models as PartModels
from stock import models as stock_models
from company.models import Company, SupplierPart
from InvenTree.fields import InvenTreeModelMoneyField, RoundingDecimalField
from InvenTree.helpers import decimal2string, getSetting, increment
from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin
from InvenTree.status_codes import (PurchaseOrderStatus, SalesOrderStatus,
StockHistoryCode, StockStatus)
from part import models as PartModels
from plugin.events import trigger_event
from plugin.models import MetadataMixin
import InvenTree.helpers
from InvenTree.fields import InvenTreeModelMoneyField, RoundingDecimalField
from InvenTree.helpers import decimal2string, increment, getSetting
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus, StockStatus, StockHistoryCode
from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin
from stock import models as stock_models
from users import models as UserModels
def get_next_po_number():

View File

@ -4,36 +4,30 @@ JSON serializers for the Order API
from decimal import Decimal
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError as DjangoValidationError
from django.db import models, transaction
from django.db.models import Case, When, Value
from django.db.models import BooleanField, ExpressionWrapper, F, Q
from django.db.models import (BooleanField, Case, ExpressionWrapper, F, Q,
Value, When)
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from rest_framework.serializers import ValidationError
from sql_util.utils import SubqueryCount
from common.settings import currency_code_mappings
from company.serializers import CompanyBriefSerializer, SupplierPartSerializer
from InvenTree.serializers import InvenTreeAttachmentSerializer
from InvenTree.helpers import normalize, extract_serial_numbers
from InvenTree.serializers import InvenTreeModelSerializer
from InvenTree.serializers import InvenTreeDecimalField
from InvenTree.serializers import InvenTreeMoneySerializer
from InvenTree.serializers import ReferenceIndexingSerializerMixin
from InvenTree.status_codes import StockStatus, PurchaseOrderStatus, SalesOrderStatus
import order.models
from part.serializers import PartBriefSerializer
import stock.models
import stock.serializers
from common.settings import currency_code_mappings
from company.serializers import CompanyBriefSerializer, SupplierPartSerializer
from InvenTree.helpers import extract_serial_numbers, normalize
from InvenTree.serializers import (InvenTreeAttachmentSerializer,
InvenTreeDecimalField,
InvenTreeModelSerializer,
InvenTreeMoneySerializer,
ReferenceIndexingSerializerMixin)
from InvenTree.status_codes import (PurchaseOrderStatus, SalesOrderStatus,
StockStatus)
from part.serializers import PartBriefSerializer
from users.serializers import OwnerSerializer

View File

@ -3,20 +3,17 @@ Tests for the Order API
"""
import io
from datetime import datetime, timedelta
from rest_framework import status
from django.urls import reverse
from InvenTree.api_tester import InvenTreeAPITestCase
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from part.models import Part
from stock.models import StockItem
from rest_framework import status
import order.models as models
from InvenTree.api_tester import InvenTreeAPITestCase
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from part.models import Part
from stock.models import StockItem
class OrderTest(InvenTreeAPITestCase):

View File

@ -1,21 +1,16 @@
# -*- coding: utf-8 -*-
from django.test import TestCase
from django.core.exceptions import ValidationError
from datetime import datetime, timedelta
from company.models import Company
from InvenTree import status_codes as status
from django.core.exceptions import ValidationError
from django.test import TestCase
from common.models import InvenTreeSetting
from order.models import SalesOrder, SalesOrderLineItem, SalesOrderAllocation, SalesOrderShipment
from company.models import Company
from InvenTree import status_codes as status
from order.models import (SalesOrder, SalesOrderAllocation, SalesOrderLineItem,
SalesOrderShipment)
from part.models import Part
from stock.models import StockItem

View File

@ -1,9 +1,9 @@
""" Unit tests for Order views (see views.py) """
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import TestCase
from django.urls import reverse
class OrderViewTestCase(TestCase):

View File

@ -2,15 +2,15 @@
from datetime import datetime, timedelta
from django.test import TestCase
import django.core.exceptions as django_exceptions
from django.test import TestCase
from part.models import Part
from .models import PurchaseOrder, PurchaseOrderLineItem
from stock.models import StockLocation
from company.models import SupplierPart
from InvenTree.status_codes import PurchaseOrderStatus
from part.models import Part
from stock.models import StockLocation
from .models import PurchaseOrder, PurchaseOrderLineItem
class OrderTest(TestCase):

View File

@ -2,36 +2,32 @@
Django views for interacting with Order app
"""
from django.db.utils import IntegrityError
from django.http.response import JsonResponse
from django.shortcuts import get_object_or_404
from django.urls import reverse
from django.http import HttpResponseRedirect
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView
from django.forms import HiddenInput, IntegerField
import logging
from decimal import Decimal, InvalidOperation
from .models import PurchaseOrder, PurchaseOrderLineItem
from .models import SalesOrder, SalesOrderLineItem
from .admin import PurchaseOrderLineItemResource, SalesOrderLineItemResource
from company.models import SupplierPart # ManufacturerPart
from part.models import Part
from django.db.utils import IntegrityError
from django.forms import HiddenInput, IntegerField
from django.http import HttpResponseRedirect
from django.http.response import JsonResponse
from django.shortcuts import get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView
from common.forms import UploadFileForm, MatchFieldForm
from common.views import FileManagementFormView
from common.files import FileManager
from . import forms as order_forms
from part.views import PartPricing
from common.forms import MatchFieldForm, UploadFileForm
from common.views import FileManagementFormView
from company.models import SupplierPart # ManufacturerPart
from InvenTree.helpers import DownloadFile
from InvenTree.views import InvenTreeRoleMixin, AjaxView
from InvenTree.views import AjaxView, InvenTreeRoleMixin
from part.models import Part
from part.views import PartPricing
from plugin.views import InvenTreePluginViewMixin
from . import forms as order_forms
from .admin import PurchaseOrderLineItemResource, SalesOrderLineItemResource
from .models import (PurchaseOrder, PurchaseOrderLineItem, SalesOrder,
SalesOrderLineItem)
logger = logging.getLogger("inventree")

View File

@ -1,12 +1,12 @@
from django.contrib import admin
import import_export.widgets as widgets
from import_export.admin import ImportExportModelAdmin
from import_export.fields import Field
from import_export.resources import ModelResource
import import_export.widgets as widgets
from company.models import SupplierPart
import part.models as models
from company.models import SupplierPart
from stock.models import StockLocation

View File

@ -3,53 +3,41 @@ Provides a JSON API for the Part app
"""
import datetime
from django.urls import include, path, re_path
from django.http import JsonResponse
from django.db.models import Q, F, Count, Min, Max, Avg
from django.db import transaction
from django.utils.translation import gettext_lazy as _
from rest_framework import status
from rest_framework.response import Response
from rest_framework import filters, serializers
from rest_framework import generics
from rest_framework.exceptions import ValidationError
from django_filters.rest_framework import DjangoFilterBackend
from django_filters import rest_framework as rest_filters
from djmoney.money import Money
from djmoney.contrib.exchange.models import convert_money
from djmoney.contrib.exchange.exceptions import MissingRate
from decimal import Decimal, InvalidOperation
from part.admin import PartResource
from django.db import transaction
from django.db.models import Avg, Count, F, Max, Min, Q
from django.http import JsonResponse
from django.urls import include, path, re_path
from django.utils.translation import gettext_lazy as _
from .models import Part, PartCategory, PartRelated
from .models import BomItem, BomItemSubstitute
from .models import PartParameter, PartParameterTemplate
from .models import PartAttachment, PartTestTemplate
from .models import PartSellPriceBreak, PartInternalPriceBreak
from .models import PartCategoryParameterTemplate
from django_filters import rest_framework as rest_filters
from django_filters.rest_framework import DjangoFilterBackend
from djmoney.contrib.exchange.exceptions import MissingRate
from djmoney.contrib.exchange.models import convert_money
from djmoney.money import Money
from rest_framework import filters, generics, serializers, status
from rest_framework.exceptions import ValidationError
from rest_framework.response import Response
import order.models
from build.models import Build, BuildItem
from common.models import InvenTreeSetting
from company.models import Company, ManufacturerPart, SupplierPart
from InvenTree.api import APIDownloadMixin, AttachmentMixin
from InvenTree.helpers import DownloadFile, increment, isNull, str2bool
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
SalesOrderStatus)
from part.admin import PartResource
from plugin.serializers import MetadataSerializer
from stock.models import StockItem, StockLocation
from common.models import InvenTreeSetting
from build.models import Build, BuildItem
import order.models
from plugin.serializers import MetadataSerializer
from . import serializers as part_serializers
from InvenTree.helpers import str2bool, isNull, increment
from InvenTree.helpers import DownloadFile
from InvenTree.api import AttachmentMixin, APIDownloadMixin
from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus, SalesOrderStatus
from .models import (BomItem, BomItemSubstitute, Part, PartAttachment,
PartCategory, PartCategoryParameterTemplate,
PartInternalPriceBreak, PartParameter,
PartParameterTemplate, PartRelated, PartSellPriceBreak,
PartTestTemplate)
class CategoryList(generics.ListCreateAPIView):

View File

@ -1,11 +1,10 @@
import logging
from django.db.utils import OperationalError, ProgrammingError
from django.apps import AppConfig
from django.db.utils import OperationalError, ProgrammingError
from InvenTree.ready import canAppAccessDatabase
logger = logging.getLogger("inventree")

View File

@ -7,11 +7,11 @@ from collections import OrderedDict
from django.utils.translation import gettext as _
from company.models import ManufacturerPart, SupplierPart
from InvenTree.helpers import DownloadFile, GetExportFormats, normalize
from .admin import BomItemResource
from .models import BomItem
from company.models import ManufacturerPart, SupplierPart
def IsValidBOMFormat(fmt):

View File

@ -7,17 +7,15 @@ from django.utils.translation import gettext_lazy as _
from mptt.fields import TreeNodeChoiceField
from InvenTree.forms import HelperForm
from InvenTree.helpers import clean_decimal
from InvenTree.fields import RoundingDecimalFormField
import common.models
from common.forms import MatchItemForm
from InvenTree.fields import RoundingDecimalFormField
from InvenTree.forms import HelperForm
from InvenTree.helpers import clean_decimal
from .models import Part, PartCategory
from .models import PartParameterTemplate
from .models import PartCategoryParameterTemplate
from .models import PartSellPriceBreak, PartInternalPriceBreak
from .models import (Part, PartCategory, PartCategoryParameterTemplate,
PartInternalPriceBreak, PartParameterTemplate,
PartSellPriceBreak)
class PartModelChoiceField(forms.ModelChoiceField):

View File

@ -3,64 +3,52 @@ Part database model definitions
"""
import decimal
import os
import hashlib
import logging
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from django.urls import reverse
from django.db import models, transaction
from django.db.utils import IntegrityError
from django.db.models import Q, Sum, UniqueConstraint
from django.db.models.functions import Coalesce
from django.core.validators import MinValueValidator
import os
from datetime import datetime
from decimal import Decimal, InvalidOperation
from django.contrib.auth.models import User
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, UniqueConstraint
from django.db.models.functions import Coalesce
from django.db.models.signals import post_save
from django.db.utils import IntegrityError
from django.dispatch import receiver
from jinja2 import Template
from markdownx.models import MarkdownxField
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django_cleanup import cleanup
from djmoney.contrib.exchange.exceptions import MissingRate
from mptt.models import TreeForeignKey, MPTTModel
from djmoney.contrib.exchange.models import convert_money
from jinja2 import Template
from markdownx.models import MarkdownxField
from mptt.exceptions import InvalidMove
from mptt.managers import TreeManager
from mptt.models import MPTTModel, TreeForeignKey
from stdimage.models import StdImageField
from decimal import Decimal, InvalidOperation
from datetime import datetime
import hashlib
from djmoney.contrib.exchange.models import convert_money
from common.settings import currency_code_default
from common.models import InvenTreeSetting
from InvenTree import helpers
from InvenTree import validators
import common.models
import InvenTree.ready
import InvenTree.tasks
from InvenTree.fields import InvenTreeURLField
from InvenTree.helpers import decimal2string, normalize, decimal2money
from InvenTree.models import InvenTreeTree, InvenTreeAttachment, DataImportMixin
from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus, SalesOrderStatus
import common.models
from build import models as BuildModels
from order import models as OrderModels
from company.models import SupplierPart
import part.settings as part_settings
from stock import models as StockModels
from build import models as BuildModels
from common.models import InvenTreeSetting
from common.settings import currency_code_default
from company.models import SupplierPart
from InvenTree import helpers, validators
from InvenTree.fields import InvenTreeURLField
from InvenTree.helpers import decimal2money, decimal2string, normalize
from InvenTree.models import (DataImportMixin, InvenTreeAttachment,
InvenTreeTree)
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
SalesOrderStatus)
from order import models as OrderModels
from plugin.models import MetadataMixin
from stock import models as StockModels
logger = logging.getLogger("inventree")

View File

@ -5,40 +5,35 @@ JSON serializers for Part app
import imghdr
from decimal import Decimal
from django.urls import reverse_lazy
from django.db import models, transaction
from django.db.models import ExpressionWrapper, F, Q, Func
from django.db.models import Subquery, OuterRef, FloatField
from django.db.models import (ExpressionWrapper, F, FloatField, Func, OuterRef,
Q, Subquery)
from django.db.models.functions import Coalesce
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from djmoney.contrib.django_rest_framework import MoneyField
from rest_framework import serializers
from sql_util.utils import SubqueryCount, SubquerySum
from djmoney.contrib.django_rest_framework import MoneyField
from common.settings import currency_code_default, currency_code_mappings
from InvenTree.serializers import (DataFileUploadSerializer,
DataFileExtractSerializer,
from InvenTree.serializers import (DataFileExtractSerializer,
DataFileUploadSerializer,
InvenTreeAttachmentSerializer,
InvenTreeAttachmentSerializerField,
InvenTreeDecimalField,
InvenTreeImageSerializerField,
InvenTreeModelSerializer,
InvenTreeAttachmentSerializer,
InvenTreeMoneySerializer)
from InvenTree.status_codes import (BuildStatus,
PurchaseOrderStatus,
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
SalesOrderStatus)
from stock.models import StockItem
from .models import (BomItem, BomItemSubstitute,
Part, PartAttachment, PartCategory, PartRelated,
PartParameter, PartParameterTemplate, PartSellPriceBreak,
PartStar, PartTestTemplate, PartCategoryParameterTemplate,
PartInternalPriceBreak)
from .models import (BomItem, BomItemSubstitute, Part, PartAttachment,
PartCategory, PartCategoryParameterTemplate,
PartInternalPriceBreak, PartParameter,
PartParameterTemplate, PartRelated, PartSellPriceBreak,
PartStar, PartTestTemplate)
class CategorySerializer(InvenTreeModelSerializer):

View File

@ -2,10 +2,9 @@ import logging
from django.utils.translation import gettext_lazy as _
import common.notifications
import InvenTree.helpers
import InvenTree.tasks
import common.notifications
import part.models
logger = logging.getLogger("inventree")

View File

@ -5,30 +5,25 @@ This module provides template tags for extra functionality,
over and above the built-in Django tags.
"""
from datetime import date, datetime
import logging
import os
import sys
import logging
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django.conf import settings as djangosettings
from datetime import date, datetime
from django import template
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.templatetags.static import StaticNode, static
from django.conf import settings as djangosettings
from django.core.files.storage import default_storage
from InvenTree import version, settings
from django.templatetags.static import StaticNode, static
from django.urls import reverse
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
import InvenTree.helpers
from common.models import InvenTreeSetting, ColorTheme, InvenTreeUserSetting
from common.models import ColorTheme, InvenTreeSetting, InvenTreeUserSetting
from common.settings import currency_code_default
from plugin.models import PluginSetting, NotificationUserSetting
from InvenTree import settings, version
from plugin.models import NotificationUserSetting, PluginSetting
register = template.Library()

View File

@ -4,8 +4,9 @@ Provide templates for the various model status codes.
from django import template
from django.utils.safestring import mark_safe
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
from InvenTree.status_codes import StockStatus, BuildStatus
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
SalesOrderStatus, StockStatus)
register = template.Library()

View File

@ -1,21 +1,18 @@
import PIL
from django.urls import reverse
import PIL
from rest_framework import status
from rest_framework.test import APIClient
from InvenTree.api_tester import InvenTreeAPITestCase
from InvenTree.status_codes import BuildStatus, StockStatus, PurchaseOrderStatus
from part.models import Part, PartCategory
from part.models import BomItem, BomItemSubstitute
from stock.models import StockItem, StockLocation
from company.models import Company
from common.models import InvenTreeSetting
import build.models
import order.models
from common.models import InvenTreeSetting
from company.models import Company
from InvenTree.api_tester import InvenTreeAPITestCase
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
StockStatus)
from part.models import BomItem, BomItemSubstitute, Part, PartCategory
from stock.models import StockItem, StockLocation
class PartCategoryAPITest(InvenTreeAPITestCase):

View File

@ -4,11 +4,10 @@ Unit testing for BOM export functionality
import csv
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import TestCase
from django.urls import reverse
class BomExportTest(TestCase):

View File

@ -2,13 +2,12 @@
Unit testing for BOM upload / import functionality
"""
import tablib
from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse
from InvenTree.api_tester import InvenTreeAPITestCase
import tablib
from InvenTree.api_tester import InvenTreeAPITestCase
from part.models import Part

View File

@ -1,11 +1,11 @@
from django.db import transaction
from django.test import TestCase
import django.core.exceptions as django_exceptions
from decimal import Decimal
from .models import Part, BomItem, BomItemSubstitute
import django.core.exceptions as django_exceptions
from django.db import transaction
from django.test import TestCase
from .models import BomItem, BomItemSubstitute, Part
class BomItemTest(TestCase):

View File

@ -1,5 +1,5 @@
from django.test import TestCase
from django.core.exceptions import ValidationError
from django.test import TestCase
from .models import Part, PartCategory, PartParameter, PartParameterTemplate

View File

@ -1,11 +1,10 @@
# Tests for Part Parameters
from django.test import TestCase, TransactionTestCase
import django.core.exceptions as django_exceptions
from django.test import TestCase, TransactionTestCase
from .models import Part, PartCategory
from .models import PartParameter, PartParameterTemplate
from .models import PartCategoryParameterTemplate
from .models import (Part, PartCategory, PartCategoryParameterTemplate,
PartParameter, PartParameterTemplate)
class TestParams(TestCase):

View File

@ -1,24 +1,23 @@
# Tests for the Part model
from allauth.account.models import EmailAddress
from django.conf import settings
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.core.exceptions import ValidationError
import os
from .models import Part, PartCategory, PartCategoryStar, PartStar, PartTestTemplate
from .models import rename_part_image
from .templatetags import inventree_extras
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from django.test import TestCase
from allauth.account.models import EmailAddress
import part.settings
from common.models import (InvenTreeSetting, InvenTreeUserSetting,
NotificationEntry, NotificationMessage)
from common.notifications import UIMessageNotification, storage
from InvenTree import version
from common.models import InvenTreeSetting, InvenTreeUserSetting, NotificationEntry, NotificationMessage
from common.notifications import storage, UIMessageNotification
from .models import (Part, PartCategory, PartCategoryStar, PartStar,
PartTestTemplate, rename_part_image)
from .templatetags import inventree_extras
class TemplateTagTest(TestCase):

View File

@ -1,9 +1,9 @@
""" Unit tests for Part Views (see views.py) """
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.test import TestCase
from django.urls import reverse
from .models import Part

View File

@ -12,7 +12,6 @@ from django.urls import include, re_path
from . import views
part_parameter_urls = [
re_path(r'^template/new/', views.PartParameterTemplateCreate.as_view(), name='part-param-template-create'),
re_path(r'^template/(?P<pk>\d+)/edit/', views.PartParameterTemplateEdit.as_view(), name='part-param-template-edit'),

View File

@ -2,55 +2,44 @@
Django views for interacting with Part app
"""
from django.core.files.base import ContentFile
from django.core.exceptions import ValidationError
from django.db import transaction
from django.db.utils import IntegrityError
from django.shortcuts import get_object_or_404
from django.shortcuts import HttpResponseRedirect
from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from django.views.generic import DetailView, ListView
from django.forms import HiddenInput
from django.conf import settings
from django.contrib import messages
from djmoney.contrib.exchange.models import convert_money
from djmoney.contrib.exchange.exceptions import MissingRate
from PIL import Image
import requests
import os
import io
import os
from decimal import Decimal
from .models import PartCategory, Part
from .models import PartParameterTemplate
from .models import PartCategoryParameterTemplate
from django.conf import settings
from django.contrib import messages
from django.core.exceptions import ValidationError
from django.core.files.base import ContentFile
from django.db import transaction
from django.db.utils import IntegrityError
from django.forms import HiddenInput
from django.shortcuts import HttpResponseRedirect, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.generic import DetailView, ListView
from common.models import InvenTreeSetting
from company.models import SupplierPart
from common.files import FileManager
from common.views import FileManagementFormView, FileManagementAjaxView
from stock.models import StockItem, StockLocation
import requests
from djmoney.contrib.exchange.exceptions import MissingRate
from djmoney.contrib.exchange.models import convert_money
from PIL import Image
import common.settings as inventree_settings
from common.files import FileManager
from common.models import InvenTreeSetting
from common.views import FileManagementAjaxView, FileManagementFormView
from company.models import SupplierPart
from InvenTree.helpers import str2bool
from InvenTree.views import (AjaxCreateView, AjaxDeleteView, AjaxUpdateView,
AjaxView, InvenTreeRoleMixin, QRCodeView)
from order.models import PurchaseOrderLineItem
from plugin.views import InvenTreePluginViewMixin
from stock.models import StockItem, StockLocation
from . import forms as part_forms
from . import settings as part_settings
from .bom import MakeBomTemplate, ExportBom, IsValidBOMFormat
from order.models import PurchaseOrderLineItem
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView
from InvenTree.views import QRCodeView
from InvenTree.views import InvenTreeRoleMixin
from InvenTree.helpers import str2bool
from plugin.views import InvenTreePluginViewMixin
from .bom import ExportBom, IsValidBOMFormat, MakeBomTemplate
from .models import (Part, PartCategory, PartCategoryParameterTemplate,
PartParameterTemplate)
class PartIndex(InvenTreeRoleMixin, ListView):

View File

@ -2,9 +2,9 @@
Utility file to enable simper imports
"""
from .helpers import MixinImplementationError, MixinNotImplementedError
from .plugin import IntegrationPluginBase, InvenTreePlugin
from .registry import registry
from .plugin import InvenTreePlugin, IntegrationPluginBase
from .helpers import MixinNotImplementedError, MixinImplementationError
__all__ = [
'registry',

View File

@ -5,18 +5,17 @@ JSON API for the plugin app
from django.conf import settings
from django.urls import include, re_path
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, generics, permissions, status
from rest_framework.exceptions import NotFound
from rest_framework.response import Response
from django_filters.rest_framework import DjangoFilterBackend
import plugin.serializers as PluginSerializers
from common.api import GlobalSettingsPermissions
from plugin.base.barcodes.api import barcode_api_urls
from plugin.base.action.api import ActionPluginView
from plugin.base.barcodes.api import barcode_api_urls
from plugin.base.locate.api import LocatePluginView
from plugin.models import PluginConfig, PluginSetting
import plugin.serializers as PluginSerializers
from plugin.registry import registry

View File

@ -11,7 +11,6 @@ from InvenTree.ready import canAppAccessDatabase
from plugin import registry
from plugin.helpers import check_git_version, log_error
logger = logging.getLogger('inventree')

View File

@ -1,7 +1,7 @@
""" Unit tests for action plugins """
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.test import TestCase
from plugin import InvenTreePlugin
from plugin.mixins import ActionMixin

View File

@ -1,19 +1,18 @@
# -*- coding: utf-8 -*-
from django.urls import reverse, path, re_path
from django.urls import path, re_path, reverse
from django.utils.translation import gettext_lazy as _
from rest_framework.exceptions import ValidationError
from rest_framework import permissions
from rest_framework.exceptions import ValidationError
from rest_framework.response import Response
from rest_framework.views import APIView
from plugin import registry
from plugin.base.barcodes.mixins import hash_barcode
from plugin.builtin.barcodes.inventree_barcode import InvenTreeBarcodePlugin
from stock.models import StockItem
from stock.serializers import StockItemSerializer
from plugin.builtin.barcodes.inventree_barcode import InvenTreeBarcodePlugin
from plugin.base.barcodes.mixins import hash_barcode
from plugin import registry
class BarcodeScan(APIView):
"""

View File

@ -1,12 +1,12 @@
"""
Plugin mixin classes for barcode plugin
"""
import string
import hashlib
import string
from stock.models import StockItem
from stock.serializers import StockItemSerializer, LocationSerializer
from part.serializers import PartSerializer
from stock.models import StockItem
from stock.serializers import LocationSerializer, StockItemSerializer
def hash_barcode(barcode_data):

View File

@ -7,8 +7,8 @@ Unit tests for Barcode endpoints
from django.contrib.auth import get_user_model
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from rest_framework.test import APITestCase
from stock.models import StockItem

View File

@ -6,15 +6,13 @@ import logging
from django.conf import settings
from django.db import transaction
from django.db.models.signals import post_save, post_delete
from django.db.models.signals import post_delete, post_save
from django.dispatch.dispatcher import receiver
from InvenTree.ready import canAppAccessDatabase, isImportingData
from InvenTree.tasks import offload_task
from plugin.registry import registry
logger = logging.getLogger('inventree')

View File

@ -2,22 +2,21 @@
Plugin mixin classes
"""
import logging
import json
import logging
from django.db.utils import OperationalError, ProgrammingError
from django.urls import include, re_path
import requests
from django.urls import include, re_path
from django.db.utils import OperationalError, ProgrammingError
import InvenTree.helpers
from plugin.helpers import MixinImplementationError, MixinNotImplementedError
from plugin.helpers import render_template, render_text
from plugin.helpers import (MixinImplementationError, MixinNotImplementedError,
render_template, render_text)
from plugin.models import PluginConfig, PluginSetting
from plugin.registry import registry
from plugin.urls import PLUGIN_BASE
logger = logging.getLogger('inventree')

Some files were not shown because too many files have changed in this diff Show More