mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
resort imports
This commit is contained in:
parent
ddc4ef3c38
commit
e1d22f538d
@ -2,18 +2,17 @@
|
|||||||
Main JSON interface views
|
Main JSON interface views
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
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 .status import is_worker_running
|
||||||
|
from .version import (inventreeApiVersion, inventreeInstanceName,
|
||||||
|
inventreeVersion)
|
||||||
|
from .views import AjaxView
|
||||||
|
|
||||||
|
|
||||||
class InfoView(AjaxView):
|
class InfoView(AjaxView):
|
||||||
|
@ -6,9 +6,10 @@ import csv
|
|||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from django.http.response import StreamingHttpResponse
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.http.response import StreamingHttpResponse
|
||||||
|
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,16 +3,16 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.core.exceptions import AppRegistryNotReady
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.core.exceptions import AppRegistryNotReady
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.utils import IntegrityError
|
from django.db.utils import IntegrityError
|
||||||
|
|
||||||
from InvenTree.ready import isInTestMode, canAppAccessDatabase
|
|
||||||
from .config import get_setting
|
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
|
from InvenTree.ready import canAppAccessDatabase, isInTestMode
|
||||||
|
|
||||||
|
from .config import get_setting
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
@ -111,8 +111,8 @@ class InvenTreeConfig(AppConfig):
|
|||||||
try:
|
try:
|
||||||
from djmoney.contrib.exchange.models import ExchangeBackend
|
from djmoney.contrib.exchange.models import ExchangeBackend
|
||||||
|
|
||||||
from InvenTree.tasks import update_exchange_rates
|
|
||||||
from common.settings import currency_code_default
|
from common.settings import currency_code_default
|
||||||
|
from InvenTree.tasks import update_exchange_rates
|
||||||
except AppRegistryNotReady: # pragma: no cover
|
except AppRegistryNotReady: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -3,12 +3,12 @@ Pull rendered copies of the templated
|
|||||||
only used for testing the js files! - This file is omited from coverage
|
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 os # pragma: no cover
|
||||||
import pathlib # 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
|
class RenderJavascriptFiles(TestCase): # pragma: no cover
|
||||||
"""
|
"""
|
||||||
|
@ -2,10 +2,9 @@
|
|||||||
Helper functions for loading InvenTree configuration options
|
Helper functions for loading InvenTree configuration options
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import logging
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
@ -4,12 +4,10 @@
|
|||||||
Provides extra global data to all templates.
|
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
|
import InvenTree.status
|
||||||
|
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
|
||||||
|
SalesOrderStatus, StockHistoryCode,
|
||||||
|
StockStatus)
|
||||||
from users.models import RuleSet
|
from users.models import RuleSet
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,20 +5,19 @@ Custom exception handling for the DRF API
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import traceback
|
|
||||||
import sys
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.debug import ExceptionReporter
|
from django.views.debug import ExceptionReporter
|
||||||
|
|
||||||
|
import rest_framework.views as drfviews
|
||||||
from error_report.models import Error
|
from error_report.models import Error
|
||||||
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError as DRFValidationError
|
from rest_framework.exceptions import ValidationError as DRFValidationError
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import serializers
|
|
||||||
import rest_framework.views as drfviews
|
|
||||||
|
|
||||||
|
|
||||||
def exception_handler(exc, context):
|
def exception_handler(exc, context):
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
import certifi
|
|
||||||
import ssl
|
import ssl
|
||||||
|
from urllib.error import URLError
|
||||||
from urllib.request import urlopen
|
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
|
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):
|
class InvenTreeExchange(SimpleExchangeBackend):
|
||||||
"""
|
"""
|
||||||
|
@ -1,24 +1,22 @@
|
|||||||
""" Custom fields used in InvenTree """
|
""" Custom fields used in InvenTree """
|
||||||
|
|
||||||
import sys
|
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 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.forms.fields import MoneyField
|
||||||
|
from djmoney.models.fields import MoneyField as ModelMoneyField
|
||||||
from djmoney.models.validators import MinMoneyValidator
|
from djmoney.models.validators import MinMoneyValidator
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
|
|
||||||
|
from .validators import allowable_url_schemes
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeURLFormField(FormURLField):
|
class InvenTreeURLFormField(FormURLField):
|
||||||
""" Custom URL form field with custom scheme validators """
|
""" Custom URL form field with custom scheme validators """
|
||||||
@ -39,7 +37,7 @@ class InvenTreeURLField(models.URLField):
|
|||||||
|
|
||||||
def money_kwargs():
|
def money_kwargs():
|
||||||
""" returns the database settings for MoneyFields """
|
""" 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 = {}
|
||||||
kwargs['currency_choices'] = currency_code_mappings()
|
kwargs['currency_choices'] = currency_code_mappings()
|
||||||
|
@ -2,29 +2,29 @@
|
|||||||
Helper forms which subclass Django forms to provide additional functionality
|
Helper forms which subclass Django forms to provide additional functionality
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from urllib.parse import urlencode
|
|
||||||
import logging
|
import logging
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import User, Group
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.models import Group, User
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse
|
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.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.exceptions import ImmediateHttpResponse
|
||||||
|
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
|
||||||
from allauth_2fa.adapter import OTPAdapter
|
from allauth_2fa.adapter import OTPAdapter
|
||||||
from allauth_2fa.utils import user_has_valid_totp_device
|
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 common.models import InvenTreeSetting
|
||||||
|
from part.models import PartCategory
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
@ -3,27 +3,25 @@ Provides helper functions used throughout the InvenTree project
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import io
|
import io
|
||||||
import re
|
|
||||||
import json
|
import json
|
||||||
import os.path
|
import os.path
|
||||||
from PIL import Image
|
import re
|
||||||
|
|
||||||
from decimal import Decimal, InvalidOperation
|
from decimal import Decimal, InvalidOperation
|
||||||
|
|
||||||
from wsgiref.util import FileWrapper
|
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
|
from django.contrib.auth.models import Permission
|
||||||
|
from django.core.exceptions import FieldError, ValidationError
|
||||||
import InvenTree.version
|
from django.http import StreamingHttpResponse
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
from common.models import InvenTreeSetting
|
|
||||||
from .settings import MEDIA_URL, STATIC_URL
|
|
||||||
from common.settings import currency_code_default
|
|
||||||
|
|
||||||
from djmoney.money import Money
|
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):
|
def getSetting(key, backup_value=None):
|
||||||
|
@ -6,7 +6,6 @@ import logging
|
|||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,15 +2,15 @@
|
|||||||
Custom management command to prerender files
|
Custom management command to prerender files
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
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.template.loader import render_to_string
|
||||||
from django.utils.module_loading import import_string
|
from django.utils.module_loading import import_string
|
||||||
from django.http.request import HttpRequest
|
|
||||||
from django.utils.translation import override as lang_over
|
from django.utils.translation import override as lang_over
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
def render_file(file_name, source, target, locales, ctx):
|
def render_file(file_name, source, target, locales, ctx):
|
||||||
""" renders a file into all provided locales """
|
""" renders a file into all provided locales """
|
||||||
|
@ -4,19 +4,18 @@ Custom management command to rebuild thumbnail images
|
|||||||
- May be required after importing a new dataset, for example
|
- May be required after importing a new dataset, for example
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
import logging
|
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 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 company.models import Company
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
Custom management command to remove MFA for a user
|
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.contrib.auth import get_user_model
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -2,13 +2,12 @@
|
|||||||
Custom management command, wait for the database to be ready!
|
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
|
import time
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.db import connection
|
||||||
|
from django.db.utils import ImproperlyConfigured, OperationalError
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
"""
|
"""
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework.fields import empty
|
||||||
from rest_framework.metadata import SimpleMetadata
|
from rest_framework.metadata import SimpleMetadata
|
||||||
from rest_framework.utils import model_meta
|
from rest_framework.utils import model_meta
|
||||||
from rest_framework.fields import empty
|
|
||||||
|
|
||||||
from InvenTree.helpers import str2bool
|
|
||||||
|
|
||||||
import users.models
|
import users.models
|
||||||
|
from InvenTree.helpers import str2bool
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
@ -1,20 +1,19 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.middleware import PersistentRemoteUserMiddleware
|
from django.contrib.auth.middleware import PersistentRemoteUserMiddleware
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse_lazy, Resolver404
|
from django.urls import Resolver404, include, re_path, reverse_lazy
|
||||||
from django.urls import include, re_path
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
|
from allauth_2fa.middleware import (AllauthTwoFactorMiddleware,
|
||||||
|
BaseRequire2FAMiddleware)
|
||||||
from rest_framework.authtoken.models import Token
|
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 common.models import InvenTreeSetting
|
||||||
|
from InvenTree.urls import frontendpatterns
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
@ -2,27 +2,25 @@
|
|||||||
Generic models which provide extra functionality over base Django model types.
|
Generic models which provide extra functionality over base Django model types.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
from django.db import models
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.db import models
|
||||||
from django.db.models.signals import pre_delete
|
from django.db.models.signals import pre_delete
|
||||||
from django.dispatch import receiver
|
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.exceptions import InvalidMove
|
||||||
|
from mptt.models import MPTTModel, TreeForeignKey
|
||||||
|
|
||||||
from InvenTree.fields import InvenTreeURLField
|
from InvenTree.fields import InvenTreeURLField
|
||||||
from InvenTree.validators import validate_tree_name
|
from InvenTree.validators import validate_tree_name
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,27 +3,24 @@ Serializers used in various InvenTree apps
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import tablib
|
|
||||||
|
|
||||||
from decimal import Decimal
|
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
from decimal import Decimal
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.db import models
|
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.contrib.django_rest_framework.fields import MoneyField
|
||||||
from djmoney.money import Money
|
from djmoney.money import Money
|
||||||
from djmoney.utils import MONEY_CLASSES, get_currency_field_name
|
from djmoney.utils import MONEY_CLASSES, get_currency_field_name
|
||||||
|
|
||||||
from rest_framework import serializers
|
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.exceptions import ValidationError
|
||||||
|
from rest_framework.fields import empty
|
||||||
from rest_framework.serializers import DecimalField
|
from rest_framework.serializers import DecimalField
|
||||||
|
from rest_framework.utils import model_meta
|
||||||
|
|
||||||
from .models import extract_int
|
from .models import extract_int
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ database setup in this file.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import socket
|
import socket
|
||||||
@ -20,13 +19,13 @@ import string
|
|||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import moneyed
|
import django.conf.locale
|
||||||
|
|
||||||
import yaml
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.contrib.messages import constants as messages
|
from django.contrib.messages import constants as messages
|
||||||
from django.core.files.storage import default_storage
|
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
|
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
|
# Specific options for postgres backend
|
||||||
if "postgres" in db_engine: # pragma: no cover
|
if "postgres" in db_engine: # pragma: no cover
|
||||||
from psycopg2.extensions import (
|
from psycopg2.extensions import (ISOLATION_LEVEL_READ_COMMITTED,
|
||||||
ISOLATION_LEVEL_READ_COMMITTED,
|
ISOLATION_LEVEL_SERIALIZABLE)
|
||||||
ISOLATION_LEVEL_SERIALIZABLE,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Connection timeout
|
# Connection timeout
|
||||||
if "connect_timeout" not in db_options:
|
if "connect_timeout" not in db_options:
|
||||||
|
@ -3,20 +3,18 @@ Provides system status functionality checks.
|
|||||||
"""
|
"""
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.utils import timezone
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
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.models import Success
|
||||||
from django_q.monitor import Stat
|
from django_q.monitor import Stat
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
import re
|
|
||||||
import json
|
import json
|
||||||
import warnings
|
|
||||||
import requests
|
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
|
import warnings
|
||||||
from datetime import timedelta
|
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.core.exceptions import AppRegistryNotReady
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
from django.core import mail as django_mail
|
from django.utils import timezone
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
@ -72,9 +71,10 @@ def offload_task(taskname, *args, force_sync=False, **kwargs):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import importlib
|
||||||
|
|
||||||
from django_q.tasks import AsyncTask
|
from django_q.tasks import AsyncTask
|
||||||
|
|
||||||
import importlib
|
|
||||||
from InvenTree.status import is_worker_running
|
from InvenTree.status import is_worker_running
|
||||||
except AppRegistryNotReady: # pragma: no cover
|
except AppRegistryNotReady: # pragma: no cover
|
||||||
logger.warning(f"Could not offload task '{taskname}' - app registry not ready")
|
logger.warning(f"Could not offload task '{taskname}' - app registry not ready")
|
||||||
@ -254,9 +254,10 @@ def update_exchange_rates():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from InvenTree.exchange import InvenTreeExchange
|
|
||||||
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
||||||
|
|
||||||
from common.settings import currency_code_default, currency_codes
|
from common.settings import currency_code_default, currency_codes
|
||||||
|
from InvenTree.exchange import InvenTreeExchange
|
||||||
except AppRegistryNotReady: # pragma: no cover
|
except AppRegistryNotReady: # pragma: no cover
|
||||||
# Apps not yet loaded!
|
# Apps not yet loaded!
|
||||||
logger.info("Could not perform 'update_exchange_rates' - App registry not ready")
|
logger.info("Could not perform 'update_exchange_rates' - App registry not ready")
|
||||||
|
@ -1,20 +1,17 @@
|
|||||||
""" Low level tests for the InvenTree API """
|
""" Low level tests for the InvenTree API """
|
||||||
|
|
||||||
from rest_framework import status
|
from base64 import b64encode
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
from InvenTree.api_tester import InvenTreeAPITestCase
|
||||||
|
|
||||||
from users.models import RuleSet
|
from users.models import RuleSet
|
||||||
|
|
||||||
from base64 import b64encode
|
|
||||||
|
|
||||||
|
|
||||||
class HTMLAPITests(TestCase):
|
class HTMLAPITests(TestCase):
|
||||||
"""
|
"""
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
"""Tests for middleware functions"""
|
"""Tests for middleware functions"""
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,16 +4,15 @@ Unit tests for task management
|
|||||||
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from django.utils import timezone
|
|
||||||
from django.test import TestCase
|
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
|
from error_report.models import Error
|
||||||
|
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
|
|
||||||
|
|
||||||
threshold = timezone.now() - timedelta(days=30)
|
threshold = timezone.now() - timedelta(days=30)
|
||||||
threshold_low = threshold - timedelta(days=1)
|
threshold_low = threshold - timedelta(days=1)
|
||||||
|
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
Validate that all URLs specified in template files are correct.
|
Validate that all URLs specified in template files are correct.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class URLTest(TestCase):
|
class URLTest(TestCase):
|
||||||
|
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
Unit tests for the main web views
|
Unit tests for the main web views
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
|
|
||||||
|
|
||||||
class ViewTests(TestCase):
|
class ViewTests(TestCase):
|
||||||
|
@ -1,33 +1,26 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
from decimal import Decimal
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from django.test import TestCase, override_settings
|
|
||||||
import django.core.exceptions as django_exceptions
|
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.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 djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
|
from djmoney.contrib.exchange.models import Rate, convert_money
|
||||||
from .validators import validate_overage, validate_part_name
|
from djmoney.money import Money
|
||||||
from . import helpers
|
|
||||||
from . import version
|
|
||||||
from . import status
|
|
||||||
from . import ready
|
|
||||||
from . import config
|
|
||||||
|
|
||||||
from decimal import Decimal
|
|
||||||
|
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
|
|
||||||
from stock.models import StockLocation
|
|
||||||
from common.settings import currency_codes
|
|
||||||
from common.models import InvenTreeSetting
|
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):
|
class ValidatorTest(TestCase):
|
||||||
|
@ -4,47 +4,41 @@ Top-level URL lookup for InvenTree application.
|
|||||||
Passes URL lookup downstream to each app as required.
|
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 import settings
|
||||||
from django.conf.urls.static import static
|
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 django.views.generic.base import RedirectView
|
||||||
|
|
||||||
from rest_framework.documentation import include_docs_urls
|
from rest_framework.documentation import include_docs_urls
|
||||||
|
|
||||||
from .views import auth_request
|
from build.api import build_api_urls
|
||||||
from .views import IndexView, SearchView, DatabaseStatsView
|
from build.urls import build_urls
|
||||||
from .views import SettingsView, EditUserView, SetPasswordView, CustomEmailView, CustomConnectionsView, CustomPasswordResetFromKeyView
|
from common.api import common_api_urls, settings_api_urls
|
||||||
from .views import CustomSessionDeleteView, CustomSessionDeleteOtherView
|
from common.urls import common_urls
|
||||||
from .views import CurrencyRefreshView
|
from company.api import company_api_urls
|
||||||
from .views import AppearanceSelectView, SettingCategorySelectView
|
from company.urls import (company_urls, manufacturer_part_urls,
|
||||||
from .views import DynamicJsView
|
supplier_part_urls)
|
||||||
from .views import NotificationsView
|
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 .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"
|
admin.site.site_header = "InvenTree Admin"
|
||||||
|
|
||||||
|
@ -2,19 +2,17 @@
|
|||||||
Custom field validators for InvenTree
|
Custom field validators for InvenTree
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
from decimal import Decimal, InvalidOperation
|
from decimal import Decimal, InvalidOperation
|
||||||
|
|
||||||
from django.conf import settings
|
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.utils.translation import gettext_lazy as _
|
||||||
from django.core.exceptions import FieldDoesNotExist
|
|
||||||
|
|
||||||
from moneyed import CURRENCIES
|
from moneyed import CURRENCIES
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
def validate_currency_code(code):
|
def validate_currency_code(code):
|
||||||
"""
|
"""
|
||||||
|
@ -3,12 +3,12 @@ Version information for InvenTree.
|
|||||||
Provides information on the current InvenTree version
|
Provides information on the current InvenTree version
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import subprocess
|
|
||||||
import django
|
|
||||||
import re
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
import django
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
|
|
||||||
from InvenTree.api_version import INVENTREE_API_VERSION
|
from InvenTree.api_version import INVENTREE_API_VERSION
|
||||||
|
|
||||||
# InvenTree software version
|
# InvenTree software version
|
||||||
|
@ -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).
|
as JSON objects and passing them to modal forms (using jQuery / bootstrap).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
import json
|
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.template.loader import render_to_string
|
||||||
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
|
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.shortcuts import redirect
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
|
||||||
|
|
||||||
from django.views import View
|
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 django.views.generic.base import RedirectView, TemplateView
|
||||||
|
|
||||||
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
|
||||||
from allauth.account.forms import AddEmailForm
|
from allauth.account.forms import AddEmailForm
|
||||||
from allauth.socialaccount.forms import DisconnectForm
|
|
||||||
from allauth.account.models import EmailAddress
|
from allauth.account.models import EmailAddress
|
||||||
from allauth.account.views import EmailView, PasswordResetFromKeyView
|
from allauth.account.views import EmailView, PasswordResetFromKeyView
|
||||||
|
from allauth.socialaccount.forms import DisconnectForm
|
||||||
from allauth.socialaccount.views import ConnectionsView
|
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 common.settings import currency_code_default, currency_codes
|
||||||
|
|
||||||
from part.models import PartCategory
|
from part.models import PartCategory
|
||||||
from common.models import InvenTreeSetting, ColorTheme
|
from users.models import RuleSet, check_user_role
|
||||||
from users.models import check_user_role, RuleSet
|
|
||||||
|
|
||||||
from .forms import DeleteForm, EditUserForm, SetPasswordForm
|
from .forms import (DeleteForm, EditUserForm, SetPasswordForm,
|
||||||
from .forms import SettingCategorySelectForm
|
SettingCategorySelectForm)
|
||||||
from .helpers import str2bool
|
from .helpers import str2bool
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,18 +5,16 @@ Provides a JSON API for common components.
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from django.http.response import HttpResponse
|
from django.http.response import HttpResponse
|
||||||
|
from django.urls import include, path, re_path
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.urls import path
|
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
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 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 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.models
|
||||||
import common.serializers
|
import common.serializers
|
||||||
|
@ -4,7 +4,6 @@ import logging
|
|||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,12 +2,13 @@
|
|||||||
Files management tools.
|
Files management tools.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from rapidfuzz import fuzz
|
|
||||||
import tablib
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import tablib
|
||||||
|
from rapidfuzz import fuzz
|
||||||
|
|
||||||
|
|
||||||
class FileManager:
|
class FileManager:
|
||||||
|
@ -3,45 +3,41 @@ Common database model definitions.
|
|||||||
These models are 'generic' and do not fit a particular business logic object.
|
These models are 'generic' and do not fit a particular business logic object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import base64
|
||||||
import decimal
|
import decimal
|
||||||
import math
|
import hashlib
|
||||||
import uuid
|
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
import hashlib
|
import logging
|
||||||
import base64
|
import math
|
||||||
from secrets import compare_digest
|
import os
|
||||||
|
import uuid
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from secrets import compare_digest
|
||||||
|
|
||||||
from django.apps import apps
|
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.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.fields import GenericForeignKey
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.humanize.templatetags.humanize import naturaltime
|
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.urls import reverse
|
||||||
from django.utils.timezone import now
|
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.exceptions import MissingRate
|
||||||
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
|
from djmoney.settings import CURRENCY_CHOICES
|
||||||
from rest_framework.exceptions import PermissionDenied
|
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.fields
|
||||||
|
import InvenTree.helpers
|
||||||
import InvenTree.validators
|
import InvenTree.validators
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
from common.models import NotificationEntry, NotificationMessage
|
||||||
from InvenTree.helpers import inheritors
|
from InvenTree.helpers import inheritors
|
||||||
from InvenTree.ready import isImportingData
|
from InvenTree.ready import isImportingData
|
||||||
from common.models import NotificationEntry, NotificationMessage
|
|
||||||
from plugin import registry
|
from plugin import registry
|
||||||
from plugin.models import NotificationUserSetting
|
from plugin.models import NotificationUserSetting
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
JSON serializers for common components
|
JSON serializers for common components
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from InvenTree.serializers import InvenTreeModelSerializer
|
|
||||||
from InvenTree.helpers import get_objectreference
|
|
||||||
|
|
||||||
from rest_framework import serializers
|
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):
|
class SettingsSerializer(InvenTreeModelSerializer):
|
||||||
|
@ -2,15 +2,17 @@
|
|||||||
User-configurable settings for the common app
|
User-configurable settings for the common app
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from moneyed import CURRENCIES
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
from moneyed import CURRENCIES
|
||||||
|
|
||||||
|
|
||||||
def currency_code_default():
|
def currency_code_default():
|
||||||
"""
|
"""
|
||||||
Returns the default currency code (or USD if not specified)
|
Returns the default currency code (or USD if not specified)
|
||||||
"""
|
"""
|
||||||
from django.db.utils import ProgrammingError
|
from django.db.utils import ProgrammingError
|
||||||
|
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import timedelta, datetime
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.core.exceptions import AppRegistryNotReady
|
from django.core.exceptions import AppRegistryNotReady
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
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):
|
class BaseNotificationTests(BaseNotificationIntegrationTest):
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from common.models import NotificationEntry
|
from common.models import NotificationEntry
|
||||||
from . import tasks as common_tasks
|
|
||||||
from InvenTree.tasks import offload_task
|
from InvenTree.tasks import offload_task
|
||||||
|
|
||||||
|
from . import tasks as common_tasks
|
||||||
|
|
||||||
|
|
||||||
class TaskTest(TestCase):
|
class TaskTest(TestCase):
|
||||||
"""
|
"""
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
|
|
||||||
from http import HTTPStatus
|
|
||||||
import json
|
import json
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
from http import HTTPStatus
|
||||||
|
|
||||||
from django.test import TestCase, Client
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.test import Client, TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
from InvenTree.api_tester import InvenTreeAPITestCase
|
||||||
from InvenTree.helpers import str2bool
|
from InvenTree.helpers import str2bool
|
||||||
from plugin.models import NotificationUserSetting, PluginConfig
|
|
||||||
from plugin import registry
|
from plugin import registry
|
||||||
|
from plugin.models import NotificationUserSetting, PluginConfig
|
||||||
|
|
||||||
from .models import InvenTreeSetting, InvenTreeUserSetting, WebhookEndpoint, WebhookMessage, NotificationEntry, ColorTheme
|
|
||||||
from .api import WebhookView
|
from .api import WebhookView
|
||||||
|
from .models import (ColorTheme, InvenTreeSetting, InvenTreeUserSetting,
|
||||||
|
NotificationEntry, WebhookEndpoint, WebhookMessage)
|
||||||
|
|
||||||
CONTENT_TYPE_JSON = 'application/json'
|
CONTENT_TYPE_JSON = 'application/json'
|
||||||
|
|
||||||
|
@ -4,12 +4,12 @@ Django views for interacting with common models
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files.storage import FileSystemStorage
|
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 crispy_forms.helper import FormHelper
|
||||||
|
from formtools.wizard.views import SessionWizardView
|
||||||
|
|
||||||
from InvenTree.views import AjaxView
|
from InvenTree.views import AjaxView
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
from django.contrib import admin
|
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
|
import import_export.widgets as widgets
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
from .models import Company
|
from import_export.fields import Field
|
||||||
from .models import SupplierPart
|
from import_export.resources import ModelResource
|
||||||
from .models import SupplierPriceBreak
|
|
||||||
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
|
|
||||||
|
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
|
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
|
||||||
|
ManufacturerPartParameter, SupplierPart,
|
||||||
|
SupplierPriceBreak)
|
||||||
|
|
||||||
|
|
||||||
class CompanyResource(ModelResource):
|
class CompanyResource(ModelResource):
|
||||||
""" Class for managing Company data import/export """
|
""" Class for managing Company data import/export """
|
||||||
|
@ -2,25 +2,24 @@
|
|||||||
Provides a JSON API for the Company app
|
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.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.api import AttachmentMixin
|
||||||
|
from InvenTree.helpers import str2bool
|
||||||
|
|
||||||
from .models import Company
|
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
|
||||||
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
|
ManufacturerPartParameter, SupplierPart,
|
||||||
from .models import SupplierPart, SupplierPriceBreak
|
SupplierPriceBreak)
|
||||||
|
from .serializers import (CompanySerializer,
|
||||||
from .serializers import CompanySerializer
|
ManufacturerPartAttachmentSerializer,
|
||||||
from .serializers import ManufacturerPartSerializer, ManufacturerPartAttachmentSerializer, ManufacturerPartParameterSerializer
|
ManufacturerPartParameterSerializer,
|
||||||
from .serializers import SupplierPartSerializer, SupplierPriceBreakSerializer
|
ManufacturerPartSerializer, SupplierPartSerializer,
|
||||||
|
SupplierPriceBreakSerializer)
|
||||||
|
|
||||||
|
|
||||||
class CompanyList(generics.ListCreateAPIView):
|
class CompanyList(generics.ListCreateAPIView):
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
Django Forms for interacting with Company app
|
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
|
import django.forms
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import Company
|
from InvenTree.fields import RoundingDecimalFormField
|
||||||
from .models import SupplierPriceBreak
|
from InvenTree.forms import HelperForm
|
||||||
|
|
||||||
|
from .models import Company, SupplierPriceBreak
|
||||||
|
|
||||||
|
|
||||||
class CompanyImageDownloadForm(HelperForm):
|
class CompanyImageDownloadForm(HelperForm):
|
||||||
|
@ -4,32 +4,26 @@ Company database model definitions
|
|||||||
|
|
||||||
import os
|
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.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 django.urls import reverse
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
from moneyed import CURRENCIES
|
|
||||||
|
|
||||||
from markdownx.models import MarkdownxField
|
from markdownx.models import MarkdownxField
|
||||||
|
from moneyed import CURRENCIES
|
||||||
from stdimage.models import StdImageField
|
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.models
|
||||||
import common.settings
|
import common.settings
|
||||||
|
import InvenTree.validators
|
||||||
from common.settings import currency_code_default
|
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):
|
def rename_company_image(instance, filename):
|
||||||
|
@ -5,22 +5,19 @@ JSON serializers for Company app
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from sql_util.utils import SubqueryCount
|
from sql_util.utils import SubqueryCount
|
||||||
|
|
||||||
from InvenTree.serializers import InvenTreeAttachmentSerializer
|
from common.settings import currency_code_default, currency_code_mappings
|
||||||
from InvenTree.serializers import InvenTreeDecimalField
|
from InvenTree.serializers import (InvenTreeAttachmentSerializer,
|
||||||
from InvenTree.serializers import InvenTreeImageSerializerField
|
InvenTreeDecimalField,
|
||||||
from InvenTree.serializers import InvenTreeModelSerializer
|
InvenTreeImageSerializerField,
|
||||||
from InvenTree.serializers import InvenTreeMoneySerializer
|
InvenTreeModelSerializer,
|
||||||
|
InvenTreeMoneySerializer)
|
||||||
from part.serializers import PartBriefSerializer
|
from part.serializers import PartBriefSerializer
|
||||||
|
|
||||||
from .models import Company
|
from .models import (Company, ManufacturerPart, ManufacturerPartAttachment,
|
||||||
from .models import ManufacturerPart, ManufacturerPartAttachment, ManufacturerPartParameter
|
ManufacturerPartParameter, SupplierPart,
|
||||||
from .models import SupplierPart, SupplierPriceBreak
|
SupplierPriceBreak)
|
||||||
|
|
||||||
from common.settings import currency_code_default, currency_code_mappings
|
|
||||||
|
|
||||||
|
|
||||||
class CompanyBriefSerializer(InvenTreeModelSerializer):
|
class CompanyBriefSerializer(InvenTreeModelSerializer):
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from rest_framework import status
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
from InvenTree.api_tester import InvenTreeAPITestCase
|
||||||
|
|
||||||
from .models import Company
|
from .models import Company
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
""" Unit tests for Company views (see views.py) """
|
""" 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 import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class CompanyViewTestBase(TestCase):
|
class CompanyViewTestBase(TestCase):
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
from django.test import TestCase
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from .models import Company, Contact, ManufacturerPart, SupplierPart
|
from django.core.exceptions import ValidationError
|
||||||
from .models import rename_company_image
|
from django.test import TestCase
|
||||||
|
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
|
from .models import (Company, Contact, ManufacturerPart, SupplierPart,
|
||||||
|
rename_company_image)
|
||||||
|
|
||||||
|
|
||||||
class CompanySimpleTest(TestCase):
|
class CompanySimpleTest(TestCase):
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ from django.urls import include, re_path
|
|||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
company_detail_urls = [
|
company_detail_urls = [
|
||||||
|
|
||||||
re_path(r'^thumb-download/', views.CompanyImageDownloadFromURL.as_view(), name='company-image-download'),
|
re_path(r'^thumb-download/', views.CompanyImageDownloadFromURL.as_view(), name='company-image-download'),
|
||||||
|
@ -2,26 +2,21 @@
|
|||||||
Django views for interacting with Company app
|
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.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import DetailView, ListView
|
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 requests
|
||||||
import io
|
from PIL import Image
|
||||||
|
|
||||||
from InvenTree.views import AjaxUpdateView
|
from InvenTree.views import AjaxUpdateView, InvenTreeRoleMixin
|
||||||
from InvenTree.views import InvenTreeRoleMixin
|
from plugin.views import InvenTreePluginViewMixin
|
||||||
|
|
||||||
from .models import Company
|
|
||||||
from .models import ManufacturerPart
|
|
||||||
from .models import SupplierPart
|
|
||||||
|
|
||||||
from .forms import CompanyImageDownloadForm
|
from .forms import CompanyImageDownloadForm
|
||||||
|
from .models import Company, ManufacturerPart, SupplierPart
|
||||||
from plugin.views import InvenTreePluginViewMixin
|
|
||||||
|
|
||||||
|
|
||||||
class CompanyIndex(InvenTreeRoleMixin, ListView):
|
class CompanyIndex(InvenTreeRoleMixin, ListView):
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from .models import StockItemLabel, StockLocationLabel, PartLabel
|
from .models import PartLabel, StockItemLabel, StockLocationLabel
|
||||||
|
|
||||||
|
|
||||||
class LabelAdmin(admin.ModelAdmin):
|
class LabelAdmin(admin.ModelAdmin):
|
||||||
|
@ -1,30 +1,27 @@
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from PIL import Image
|
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import include, re_path
|
from django.core.exceptions import FieldError, ValidationError
|
||||||
from django.core.exceptions import ValidationError, FieldError
|
|
||||||
from django.http import HttpResponse, JsonResponse
|
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 django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from PIL import Image
|
||||||
from rest_framework import generics, filters
|
from rest_framework import filters, generics
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
import common.models
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from InvenTree.tasks import offload_task
|
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 part.models import Part
|
||||||
from plugin.base.label import label as plugin_label
|
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 .models import PartLabel, StockItemLabel, StockLocationLabel
|
||||||
from .serializers import StockItemLabelSerializer, StockLocationLabelSerializer, PartLabelSerializer
|
from .serializers import (PartLabelSerializer, StockItemLabelSerializer,
|
||||||
|
StockLocationLabelSerializer)
|
||||||
|
|
||||||
|
|
||||||
class LabelListView(generics.ListAPIView):
|
class LabelListView(generics.ListAPIView):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
import hashlib
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import logging
|
|
||||||
import hashlib
|
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
@ -10,7 +10,6 @@ from django.core.exceptions import AppRegistryNotReady
|
|||||||
|
|
||||||
from InvenTree.ready import canAppAccessDatabase
|
from InvenTree.ready import canAppAccessDatabase
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,28 +2,24 @@
|
|||||||
Label printing models
|
Label printing models
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import logging
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.core.exceptions import FieldError, ValidationError
|
||||||
from django.urls import reverse
|
|
||||||
from django.core.validators import FileExtensionValidator, MinValueValidator
|
from django.core.validators import FileExtensionValidator, MinValueValidator
|
||||||
from django.core.exceptions import ValidationError, FieldError
|
from django.db import models
|
||||||
|
from django.template import Context, Template
|
||||||
from django.template import Template, Context
|
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from InvenTree.helpers import validateFilterString, normalize
|
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
import stock.models
|
|
||||||
import part.models
|
import part.models
|
||||||
|
import stock.models
|
||||||
|
from InvenTree.helpers import normalize, validateFilterString
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django_weasyprint import WeasyTemplateResponseMixin
|
from django_weasyprint import WeasyTemplateResponseMixin
|
||||||
|
@ -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):
|
class StockItemLabelSerializer(InvenTreeModelSerializer):
|
||||||
|
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.urls import reverse
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from InvenTree.helpers import validateFilterString
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
from InvenTree.api_tester import InvenTreeAPITestCase
|
||||||
|
from InvenTree.helpers import validateFilterString
|
||||||
from .models import StockItemLabel, StockLocationLabel, PartLabel
|
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
|
|
||||||
|
from .models import PartLabel, StockItemLabel, StockLocationLabel
|
||||||
|
|
||||||
|
|
||||||
class LabelTest(InvenTreeAPITestCase):
|
class LabelTest(InvenTreeAPITestCase):
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
|
import import_export.widgets as widgets
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
|
||||||
from import_export.fields import Field
|
from import_export.fields import Field
|
||||||
from import_export.resources import ModelResource
|
from import_export.resources import ModelResource
|
||||||
import import_export.widgets as widgets
|
|
||||||
|
|
||||||
from .models import PurchaseOrder, PurchaseOrderLineItem, PurchaseOrderExtraLine
|
from .models import (PurchaseOrder, PurchaseOrderExtraLine,
|
||||||
from .models import SalesOrder, SalesOrderLineItem, SalesOrderExtraLine
|
PurchaseOrderLineItem, SalesOrder, SalesOrderAllocation,
|
||||||
from .models import SalesOrderShipment, SalesOrderAllocation
|
SalesOrderExtraLine, SalesOrderLineItem,
|
||||||
|
SalesOrderShipment)
|
||||||
|
|
||||||
|
|
||||||
# region general classes
|
# region general classes
|
||||||
|
@ -2,29 +2,25 @@
|
|||||||
JSON API for the Order app
|
JSON API for the Order app
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from django.db.models import F, Q
|
||||||
from django.urls import include, path, re_path
|
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 django_filters import rest_framework as rest_filters
|
||||||
from rest_framework import generics
|
from rest_framework import filters, generics, status
|
||||||
from rest_framework import filters, status
|
|
||||||
from rest_framework.response import Response
|
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.models as models
|
||||||
import order.serializers as serializers
|
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 part.models import Part
|
||||||
from users.models import Owner
|
|
||||||
|
|
||||||
from plugin.serializers import MetadataSerializer
|
from plugin.serializers import MetadataSerializer
|
||||||
|
from users.models import Owner
|
||||||
|
|
||||||
|
|
||||||
class GeneralExtraLineList:
|
class GeneralExtraLineList:
|
||||||
|
@ -5,11 +5,9 @@ Django Forms for interacting with Order objects
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext_lazy as _
|
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 common.forms import MatchItemForm
|
||||||
|
from InvenTree.fields import InvenTreeMoneyField
|
||||||
|
from InvenTree.helpers import clean_decimal
|
||||||
|
|
||||||
|
|
||||||
class OrderMatchItemForm(MatchItemForm):
|
class OrderMatchItemForm(MatchItemForm):
|
||||||
|
@ -5,42 +5,38 @@ Order model definitions
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
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 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.functions import Coalesce
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch.dispatcher import receiver
|
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.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
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 markdownx.models import MarkdownxField
|
||||||
from mptt.models import TreeForeignKey
|
from mptt.models import TreeForeignKey
|
||||||
|
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
import InvenTree.helpers
|
||||||
from djmoney.money import Money
|
|
||||||
from common.settings import currency_code_default
|
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 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.events import trigger_event
|
||||||
from plugin.models import MetadataMixin
|
from plugin.models import MetadataMixin
|
||||||
|
from stock import models as stock_models
|
||||||
import InvenTree.helpers
|
from users import models as UserModels
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
def get_next_po_number():
|
def get_next_po_number():
|
||||||
|
@ -4,36 +4,30 @@ JSON serializers for the Order API
|
|||||||
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
from django.db.models import Case, When, Value
|
from django.db.models import (BooleanField, Case, ExpressionWrapper, F, Q,
|
||||||
from django.db.models import BooleanField, ExpressionWrapper, F, Q
|
Value, When)
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
|
||||||
from sql_util.utils import SubqueryCount
|
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
|
import order.models
|
||||||
|
|
||||||
from part.serializers import PartBriefSerializer
|
|
||||||
|
|
||||||
import stock.models
|
import stock.models
|
||||||
import stock.serializers
|
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
|
from users.serializers import OwnerSerializer
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,20 +3,17 @@ Tests for the Order API
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import io
|
import io
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from rest_framework import status
|
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
from rest_framework import status
|
||||||
from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus
|
|
||||||
|
|
||||||
from part.models import Part
|
|
||||||
from stock.models import StockItem
|
|
||||||
|
|
||||||
import order.models as models
|
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):
|
class OrderTest(InvenTreeAPITestCase):
|
||||||
|
@ -1,21 +1,16 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from company.models import Company
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.test import TestCase
|
||||||
from InvenTree import status_codes as status
|
|
||||||
|
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
|
from company.models import Company
|
||||||
from order.models import SalesOrder, SalesOrderLineItem, SalesOrderAllocation, SalesOrderShipment
|
from InvenTree import status_codes as status
|
||||||
|
from order.models import (SalesOrder, SalesOrderAllocation, SalesOrderLineItem,
|
||||||
|
SalesOrderShipment)
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
""" Unit tests for Order views (see views.py) """
|
""" 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 import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class OrderViewTestCase(TestCase):
|
class OrderViewTestCase(TestCase):
|
||||||
|
@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
import django.core.exceptions as django_exceptions
|
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 company.models import SupplierPart
|
||||||
|
|
||||||
from InvenTree.status_codes import PurchaseOrderStatus
|
from InvenTree.status_codes import PurchaseOrderStatus
|
||||||
|
from part.models import Part
|
||||||
|
from stock.models import StockLocation
|
||||||
|
|
||||||
|
from .models import PurchaseOrder, PurchaseOrderLineItem
|
||||||
|
|
||||||
|
|
||||||
class OrderTest(TestCase):
|
class OrderTest(TestCase):
|
||||||
|
@ -2,36 +2,32 @@
|
|||||||
Django views for interacting with Order app
|
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
|
import logging
|
||||||
from decimal import Decimal, InvalidOperation
|
from decimal import Decimal, InvalidOperation
|
||||||
|
|
||||||
from .models import PurchaseOrder, PurchaseOrderLineItem
|
from django.db.utils import IntegrityError
|
||||||
from .models import SalesOrder, SalesOrderLineItem
|
from django.forms import HiddenInput, IntegerField
|
||||||
from .admin import PurchaseOrderLineItemResource, SalesOrderLineItemResource
|
from django.http import HttpResponseRedirect
|
||||||
from company.models import SupplierPart # ManufacturerPart
|
from django.http.response import JsonResponse
|
||||||
from part.models import Part
|
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 common.files import FileManager
|
||||||
|
from common.forms import MatchFieldForm, UploadFileForm
|
||||||
from . import forms as order_forms
|
from common.views import FileManagementFormView
|
||||||
from part.views import PartPricing
|
from company.models import SupplierPart # ManufacturerPart
|
||||||
|
|
||||||
from InvenTree.helpers import DownloadFile
|
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 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")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
|
import import_export.widgets as widgets
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
from import_export.fields import Field
|
from import_export.fields import Field
|
||||||
from import_export.resources import ModelResource
|
from import_export.resources import ModelResource
|
||||||
import import_export.widgets as widgets
|
|
||||||
|
|
||||||
from company.models import SupplierPart
|
|
||||||
import part.models as models
|
import part.models as models
|
||||||
|
from company.models import SupplierPart
|
||||||
from stock.models import StockLocation
|
from stock.models import StockLocation
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,53 +3,41 @@ Provides a JSON API for the Part app
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import datetime
|
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 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 django_filters import rest_framework as rest_filters
|
||||||
from .models import BomItem, BomItemSubstitute
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from .models import PartParameter, PartParameterTemplate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from .models import PartAttachment, PartTestTemplate
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from .models import PartSellPriceBreak, PartInternalPriceBreak
|
from djmoney.money import Money
|
||||||
from .models import PartCategoryParameterTemplate
|
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 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 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 . import serializers as part_serializers
|
||||||
|
from .models import (BomItem, BomItemSubstitute, Part, PartAttachment,
|
||||||
from InvenTree.helpers import str2bool, isNull, increment
|
PartCategory, PartCategoryParameterTemplate,
|
||||||
from InvenTree.helpers import DownloadFile
|
PartInternalPriceBreak, PartParameter,
|
||||||
from InvenTree.api import AttachmentMixin, APIDownloadMixin
|
PartParameterTemplate, PartRelated, PartSellPriceBreak,
|
||||||
|
PartTestTemplate)
|
||||||
from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus, SalesOrderStatus
|
|
||||||
|
|
||||||
|
|
||||||
class CategoryList(generics.ListCreateAPIView):
|
class CategoryList(generics.ListCreateAPIView):
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
from InvenTree.ready import canAppAccessDatabase
|
from InvenTree.ready import canAppAccessDatabase
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ from collections import OrderedDict
|
|||||||
|
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
from company.models import ManufacturerPart, SupplierPart
|
||||||
from InvenTree.helpers import DownloadFile, GetExportFormats, normalize
|
from InvenTree.helpers import DownloadFile, GetExportFormats, normalize
|
||||||
|
|
||||||
from .admin import BomItemResource
|
from .admin import BomItemResource
|
||||||
from .models import BomItem
|
from .models import BomItem
|
||||||
from company.models import ManufacturerPart, SupplierPart
|
|
||||||
|
|
||||||
|
|
||||||
def IsValidBOMFormat(fmt):
|
def IsValidBOMFormat(fmt):
|
||||||
|
@ -7,17 +7,15 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
|
|
||||||
from mptt.fields import TreeNodeChoiceField
|
from mptt.fields import TreeNodeChoiceField
|
||||||
|
|
||||||
from InvenTree.forms import HelperForm
|
|
||||||
from InvenTree.helpers import clean_decimal
|
|
||||||
from InvenTree.fields import RoundingDecimalFormField
|
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
from common.forms import MatchItemForm
|
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 (Part, PartCategory, PartCategoryParameterTemplate,
|
||||||
from .models import PartParameterTemplate
|
PartInternalPriceBreak, PartParameterTemplate,
|
||||||
from .models import PartCategoryParameterTemplate
|
PartSellPriceBreak)
|
||||||
from .models import PartSellPriceBreak, PartInternalPriceBreak
|
|
||||||
|
|
||||||
|
|
||||||
class PartModelChoiceField(forms.ModelChoiceField):
|
class PartModelChoiceField(forms.ModelChoiceField):
|
||||||
|
@ -3,64 +3,52 @@ Part database model definitions
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import decimal
|
import decimal
|
||||||
|
import hashlib
|
||||||
import os
|
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
from django.utils.translation import gettext_lazy as _
|
from datetime import datetime
|
||||||
from django.core.exceptions import ValidationError
|
from decimal import Decimal, InvalidOperation
|
||||||
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
|
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
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.models.signals import post_save
|
||||||
|
from django.db.utils import IntegrityError
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.urls import reverse
|
||||||
from jinja2 import Template
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from markdownx.models import MarkdownxField
|
|
||||||
|
|
||||||
from django_cleanup import cleanup
|
from django_cleanup import cleanup
|
||||||
|
|
||||||
from djmoney.contrib.exchange.exceptions import MissingRate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from mptt.models import TreeForeignKey, MPTTModel
|
from jinja2 import Template
|
||||||
|
from markdownx.models import MarkdownxField
|
||||||
from mptt.exceptions import InvalidMove
|
from mptt.exceptions import InvalidMove
|
||||||
from mptt.managers import TreeManager
|
from mptt.managers import TreeManager
|
||||||
|
from mptt.models import MPTTModel, TreeForeignKey
|
||||||
from stdimage.models import StdImageField
|
from stdimage.models import StdImageField
|
||||||
|
|
||||||
from decimal import Decimal, InvalidOperation
|
import common.models
|
||||||
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 InvenTree.ready
|
import InvenTree.ready
|
||||||
import InvenTree.tasks
|
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
|
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 plugin.models import MetadataMixin
|
||||||
|
from stock import models as StockModels
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
|
||||||
|
@ -5,40 +5,35 @@ JSON serializers for Part app
|
|||||||
import imghdr
|
import imghdr
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from django.urls import reverse_lazy
|
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
from django.db.models import ExpressionWrapper, F, Q, Func
|
from django.db.models import (ExpressionWrapper, F, FloatField, Func, OuterRef,
|
||||||
from django.db.models import Subquery, OuterRef, FloatField
|
Q, Subquery)
|
||||||
|
|
||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from djmoney.contrib.django_rest_framework import MoneyField
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from sql_util.utils import SubqueryCount, SubquerySum
|
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 common.settings import currency_code_default, currency_code_mappings
|
||||||
|
from InvenTree.serializers import (DataFileExtractSerializer,
|
||||||
from InvenTree.serializers import (DataFileUploadSerializer,
|
DataFileUploadSerializer,
|
||||||
DataFileExtractSerializer,
|
InvenTreeAttachmentSerializer,
|
||||||
InvenTreeAttachmentSerializerField,
|
InvenTreeAttachmentSerializerField,
|
||||||
InvenTreeDecimalField,
|
InvenTreeDecimalField,
|
||||||
InvenTreeImageSerializerField,
|
InvenTreeImageSerializerField,
|
||||||
InvenTreeModelSerializer,
|
InvenTreeModelSerializer,
|
||||||
InvenTreeAttachmentSerializer,
|
|
||||||
InvenTreeMoneySerializer)
|
InvenTreeMoneySerializer)
|
||||||
|
from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
|
||||||
from InvenTree.status_codes import (BuildStatus,
|
|
||||||
PurchaseOrderStatus,
|
|
||||||
SalesOrderStatus)
|
SalesOrderStatus)
|
||||||
|
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
|
|
||||||
from .models import (BomItem, BomItemSubstitute,
|
from .models import (BomItem, BomItemSubstitute, Part, PartAttachment,
|
||||||
Part, PartAttachment, PartCategory, PartRelated,
|
PartCategory, PartCategoryParameterTemplate,
|
||||||
PartParameter, PartParameterTemplate, PartSellPriceBreak,
|
PartInternalPriceBreak, PartParameter,
|
||||||
PartStar, PartTestTemplate, PartCategoryParameterTemplate,
|
PartParameterTemplate, PartRelated, PartSellPriceBreak,
|
||||||
PartInternalPriceBreak)
|
PartStar, PartTestTemplate)
|
||||||
|
|
||||||
|
|
||||||
class CategorySerializer(InvenTreeModelSerializer):
|
class CategorySerializer(InvenTreeModelSerializer):
|
||||||
|
@ -2,10 +2,9 @@ import logging
|
|||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import common.notifications
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
import common.notifications
|
|
||||||
|
|
||||||
import part.models
|
import part.models
|
||||||
|
|
||||||
logger = logging.getLogger("inventree")
|
logger = logging.getLogger("inventree")
|
||||||
|
@ -5,30 +5,25 @@ This module provides template tags for extra functionality,
|
|||||||
over and above the built-in Django tags.
|
over and above the built-in Django tags.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from datetime import date, datetime
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import logging
|
from datetime import date, datetime
|
||||||
|
|
||||||
from django.utils.html import format_html
|
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.conf import settings as djangosettings
|
|
||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
from django.urls import reverse
|
from django.conf import settings as djangosettings
|
||||||
from django.utils.safestring import mark_safe
|
|
||||||
from django.templatetags.static import StaticNode, static
|
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
|
from django.templatetags.static import StaticNode, static
|
||||||
from InvenTree import version, settings
|
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
|
import InvenTree.helpers
|
||||||
|
from common.models import ColorTheme, InvenTreeSetting, InvenTreeUserSetting
|
||||||
from common.models import InvenTreeSetting, ColorTheme, InvenTreeUserSetting
|
|
||||||
from common.settings import currency_code_default
|
from common.settings import currency_code_default
|
||||||
|
from InvenTree import settings, version
|
||||||
from plugin.models import PluginSetting, NotificationUserSetting
|
from plugin.models import NotificationUserSetting, PluginSetting
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
@ -4,8 +4,9 @@ Provide templates for the various model status codes.
|
|||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
from django.utils.safestring import mark_safe
|
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()
|
register = template.Library()
|
||||||
|
|
||||||
|
@ -1,21 +1,18 @@
|
|||||||
import PIL
|
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
import PIL
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APIClient
|
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 build.models
|
||||||
import order.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):
|
class PartCategoryAPITest(InvenTreeAPITestCase):
|
||||||
|
@ -4,11 +4,10 @@ Unit testing for BOM export functionality
|
|||||||
|
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
from django.urls import reverse
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class BomExportTest(TestCase):
|
class BomExportTest(TestCase):
|
||||||
|
@ -2,13 +2,12 @@
|
|||||||
Unit testing for BOM upload / import functionality
|
Unit testing for BOM upload / import functionality
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import tablib
|
|
||||||
|
|
||||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from InvenTree.api_tester import InvenTreeAPITestCase
|
import tablib
|
||||||
|
|
||||||
|
from InvenTree.api_tester import InvenTreeAPITestCase
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 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):
|
class BomItemTest(TestCase):
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django.test import TestCase
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
from .models import Part, PartCategory, PartParameter, PartParameterTemplate
|
from .models import Part, PartCategory, PartParameter, PartParameterTemplate
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# Tests for Part Parameters
|
# Tests for Part Parameters
|
||||||
|
|
||||||
from django.test import TestCase, TransactionTestCase
|
|
||||||
import django.core.exceptions as django_exceptions
|
import django.core.exceptions as django_exceptions
|
||||||
|
from django.test import TestCase, TransactionTestCase
|
||||||
|
|
||||||
from .models import Part, PartCategory
|
from .models import (Part, PartCategory, PartCategoryParameterTemplate,
|
||||||
from .models import PartParameter, PartParameterTemplate
|
PartParameter, PartParameterTemplate)
|
||||||
from .models import PartCategoryParameterTemplate
|
|
||||||
|
|
||||||
|
|
||||||
class TestParams(TestCase):
|
class TestParams(TestCase):
|
||||||
|
@ -1,24 +1,23 @@
|
|||||||
# Tests for the Part model
|
# 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
|
import os
|
||||||
|
|
||||||
from .models import Part, PartCategory, PartCategoryStar, PartStar, PartTestTemplate
|
from django.conf import settings
|
||||||
from .models import rename_part_image
|
from django.contrib.auth import get_user_model
|
||||||
from .templatetags import inventree_extras
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from allauth.account.models import EmailAddress
|
||||||
|
|
||||||
import part.settings
|
import part.settings
|
||||||
|
from common.models import (InvenTreeSetting, InvenTreeUserSetting,
|
||||||
|
NotificationEntry, NotificationMessage)
|
||||||
|
from common.notifications import UIMessageNotification, storage
|
||||||
from InvenTree import version
|
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):
|
class TemplateTagTest(TestCase):
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
""" Unit tests for Part Views (see views.py) """
|
""" 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 import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
from .models import Part
|
from .models import Part
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ from django.urls import include, re_path
|
|||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
part_parameter_urls = [
|
part_parameter_urls = [
|
||||||
re_path(r'^template/new/', views.PartParameterTemplateCreate.as_view(), name='part-param-template-create'),
|
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'),
|
re_path(r'^template/(?P<pk>\d+)/edit/', views.PartParameterTemplateEdit.as_view(), name='part-param-template-edit'),
|
||||||
|
@ -2,55 +2,44 @@
|
|||||||
Django views for interacting with Part app
|
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 io
|
||||||
|
import os
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from .models import PartCategory, Part
|
from django.conf import settings
|
||||||
from .models import PartParameterTemplate
|
from django.contrib import messages
|
||||||
from .models import PartCategoryParameterTemplate
|
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
|
import requests
|
||||||
from company.models import SupplierPart
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from common.files import FileManager
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from common.views import FileManagementFormView, FileManagementAjaxView
|
from PIL import Image
|
||||||
|
|
||||||
from stock.models import StockItem, StockLocation
|
|
||||||
|
|
||||||
import common.settings as inventree_settings
|
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 forms as part_forms
|
||||||
from . import settings as part_settings
|
from . import settings as part_settings
|
||||||
from .bom import MakeBomTemplate, ExportBom, IsValidBOMFormat
|
from .bom import ExportBom, IsValidBOMFormat, MakeBomTemplate
|
||||||
from order.models import PurchaseOrderLineItem
|
from .models import (Part, PartCategory, PartCategoryParameterTemplate,
|
||||||
|
PartParameterTemplate)
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
class PartIndex(InvenTreeRoleMixin, ListView):
|
class PartIndex(InvenTreeRoleMixin, ListView):
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
Utility file to enable simper imports
|
Utility file to enable simper imports
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from .helpers import MixinImplementationError, MixinNotImplementedError
|
||||||
|
from .plugin import IntegrationPluginBase, InvenTreePlugin
|
||||||
from .registry import registry
|
from .registry import registry
|
||||||
from .plugin import InvenTreePlugin, IntegrationPluginBase
|
|
||||||
from .helpers import MixinNotImplementedError, MixinImplementationError
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'registry',
|
'registry',
|
||||||
|
@ -5,18 +5,17 @@ JSON API for the plugin app
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import include, re_path
|
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 import filters, generics, permissions, status
|
||||||
from rest_framework.exceptions import NotFound
|
from rest_framework.exceptions import NotFound
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
import plugin.serializers as PluginSerializers
|
||||||
|
|
||||||
from common.api import GlobalSettingsPermissions
|
from common.api import GlobalSettingsPermissions
|
||||||
from plugin.base.barcodes.api import barcode_api_urls
|
|
||||||
from plugin.base.action.api import ActionPluginView
|
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.base.locate.api import LocatePluginView
|
||||||
from plugin.models import PluginConfig, PluginSetting
|
from plugin.models import PluginConfig, PluginSetting
|
||||||
import plugin.serializers as PluginSerializers
|
|
||||||
from plugin.registry import registry
|
from plugin.registry import registry
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ from InvenTree.ready import canAppAccessDatabase
|
|||||||
from plugin import registry
|
from plugin import registry
|
||||||
from plugin.helpers import check_git_version, log_error
|
from plugin.helpers import check_git_version, log_error
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
""" Unit tests for action plugins """
|
""" Unit tests for action plugins """
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
from plugin import InvenTreePlugin
|
from plugin import InvenTreePlugin
|
||||||
from plugin.mixins import ActionMixin
|
from plugin.mixins import ActionMixin
|
||||||
|
@ -1,19 +1,18 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- 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 django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from rest_framework.exceptions import ValidationError
|
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
|
from rest_framework.exceptions import ValidationError
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
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.models import StockItem
|
||||||
from stock.serializers import StockItemSerializer
|
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):
|
class BarcodeScan(APIView):
|
||||||
"""
|
"""
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""
|
"""
|
||||||
Plugin mixin classes for barcode plugin
|
Plugin mixin classes for barcode plugin
|
||||||
"""
|
"""
|
||||||
import string
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import string
|
||||||
|
|
||||||
from stock.models import StockItem
|
|
||||||
from stock.serializers import StockItemSerializer, LocationSerializer
|
|
||||||
from part.serializers import PartSerializer
|
from part.serializers import PartSerializer
|
||||||
|
from stock.models import StockItem
|
||||||
|
from stock.serializers import LocationSerializer, StockItemSerializer
|
||||||
|
|
||||||
|
|
||||||
def hash_barcode(barcode_data):
|
def hash_barcode(barcode_data):
|
||||||
|
@ -7,8 +7,8 @@ Unit tests for Barcode endpoints
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from rest_framework.test import APITestCase
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
|
|
||||||
|
@ -6,15 +6,13 @@ import logging
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import transaction
|
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 django.dispatch.dispatcher import receiver
|
||||||
|
|
||||||
from InvenTree.ready import canAppAccessDatabase, isImportingData
|
from InvenTree.ready import canAppAccessDatabase, isImportingData
|
||||||
from InvenTree.tasks import offload_task
|
from InvenTree.tasks import offload_task
|
||||||
|
|
||||||
from plugin.registry import registry
|
from plugin.registry import registry
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,22 +2,21 @@
|
|||||||
Plugin mixin classes
|
Plugin mixin classes
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
from django.urls import include, re_path
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from django.urls import include, re_path
|
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
|
from plugin.helpers import (MixinImplementationError, MixinNotImplementedError,
|
||||||
from plugin.helpers import MixinImplementationError, MixinNotImplementedError
|
render_template, render_text)
|
||||||
from plugin.helpers import render_template, render_text
|
|
||||||
from plugin.models import PluginConfig, PluginSetting
|
from plugin.models import PluginConfig, PluginSetting
|
||||||
from plugin.registry import registry
|
from plugin.registry import registry
|
||||||
from plugin.urls import PLUGIN_BASE
|
from plugin.urls import PLUGIN_BASE
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user