mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
Refactor to use structlog (#8747)
* use structlog instead of normal logging * more fixes * more fixes * fix test asserts * use static name * fix logger * fix assert * fix asserts
This commit is contained in:
parent
3479b0008c
commit
ea9e3fb992
@ -1,7 +1,6 @@
|
|||||||
"""Main JSON interface views."""
|
"""Main JSON interface views."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@ -10,6 +9,7 @@ from django.db import transaction
|
|||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from django_q.models import OrmQ
|
from django_q.models import OrmQ
|
||||||
from drf_spectacular.utils import OpenApiResponse, extend_schema
|
from drf_spectacular.utils import OpenApiResponse, extend_schema
|
||||||
from rest_framework import permissions, serializers
|
from rest_framework import permissions, serializers
|
||||||
@ -31,7 +31,7 @@ from .mixins import ListAPI, RetrieveUpdateAPI
|
|||||||
from .status import check_system_health, is_worker_running
|
from .status import check_system_health, is_worker_running
|
||||||
from .version import inventreeApiText
|
from .version import inventreeApiText
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class LicenseViewSerializer(serializers.Serializer):
|
class LicenseViewSerializer(serializers.Serializer):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""AppConfig for InvenTree app."""
|
"""AppConfig for InvenTree app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@ -11,6 +10,7 @@ from django.core.exceptions import AppRegistryNotReady
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.utils import IntegrityError, OperationalError
|
from django.db.utils import IntegrityError, OperationalError
|
||||||
|
|
||||||
|
import structlog
|
||||||
from allauth.socialaccount.signals import social_account_updated
|
from allauth.socialaccount.signals import social_account_updated
|
||||||
|
|
||||||
import InvenTree.conversion
|
import InvenTree.conversion
|
||||||
@ -19,7 +19,7 @@ import InvenTree.tasks
|
|||||||
from common.settings import get_global_setting, set_global_setting
|
from common.settings import get_global_setting, set_global_setting
|
||||||
from InvenTree.config import get_setting
|
from InvenTree.config import get_setting
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeConfig(AppConfig):
|
class InvenTreeConfig(AppConfig):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Overrides for allauth and adjacent packages to enforce InvenTree specific auth settings and restirctions."""
|
"""Overrides for allauth and adjacent packages to enforce InvenTree specific auth settings and restirctions."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
@ -10,6 +9,7 @@ from django.http import HttpResponseRedirect
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from allauth.account.adapter import DefaultAccountAdapter
|
from allauth.account.adapter import DefaultAccountAdapter
|
||||||
from allauth.account.forms import LoginForm, SignupForm, set_form_field_order
|
from allauth.account.forms import LoginForm, SignupForm, set_form_field_order
|
||||||
from allauth.core.exceptions import ImmediateHttpResponse
|
from allauth.core.exceptions import ImmediateHttpResponse
|
||||||
@ -27,7 +27,7 @@ import InvenTree.sso
|
|||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from InvenTree.exceptions import log_error
|
from InvenTree.exceptions import log_error
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# override allauth
|
# override allauth
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
"""Custom backend implementations."""
|
"""Custom backend implementations."""
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from django.db.utils import IntegrityError, OperationalError, ProgrammingError
|
from django.db.utils import IntegrityError, OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
from maintenance_mode.backends import AbstractStateBackend
|
from maintenance_mode.backends import AbstractStateBackend
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeMaintenanceModeBackend(AbstractStateBackend):
|
class InvenTreeMaintenanceModeBackend(AbstractStateBackend):
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
"""Configuration options for InvenTree external cache."""
|
"""Configuration options for InvenTree external cache."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.config
|
import InvenTree.config
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def cache_setting(name, default=None, **kwargs):
|
def cache_setting(name, default=None, **kwargs):
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import shutil
|
import shutil
|
||||||
@ -13,7 +12,9 @@ from pathlib import Path
|
|||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.files.storage import Storage
|
from django.core.files.storage import Storage
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
CONFIG_DATA = None
|
CONFIG_DATA = None
|
||||||
CONFIG_LOOKUPS = {}
|
CONFIG_LOOKUPS = {}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Helper functions for converting between units."""
|
"""Helper functions for converting between units."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import re
|
import re
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@ -11,7 +10,9 @@ import pint
|
|||||||
|
|
||||||
_unit_registry = None
|
_unit_registry = None
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def get_unit_registry():
|
def get_unit_registry():
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import logging
|
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@ -11,11 +10,12 @@ from django.core.exceptions import ValidationError as DjangoValidationError
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
import rest_framework.views as drfviews
|
import rest_framework.views as drfviews
|
||||||
|
import structlog
|
||||||
from rest_framework import serializers
|
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
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def log_error(path, error_name=None, error_info=None, error_data=None):
|
def log_error(path, error_name=None, error_info=None, error_data=None):
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
"""Custom exchange backend which hooks into the InvenTree plugin system to fetch exchange rates from an external API."""
|
"""Custom exchange backend which hooks into the InvenTree plugin system to fetch exchange rates from an external API."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.db.transaction import atomic
|
from django.db.transaction import atomic
|
||||||
|
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
|
from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
|
||||||
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
from djmoney.contrib.exchange.models import ExchangeBackend, Rate
|
||||||
|
|
||||||
from common.currency import currency_code_default, currency_codes
|
from common.currency import currency_code_default, currency_codes
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeExchange(SimpleExchangeBackend):
|
class InvenTreeExchange(SimpleExchangeBackend):
|
||||||
|
@ -4,7 +4,6 @@ import datetime
|
|||||||
import hashlib
|
import hashlib
|
||||||
import inspect
|
import inspect
|
||||||
import io
|
import io
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import re
|
import re
|
||||||
@ -22,6 +21,7 @@ from django.utils import timezone
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
|
import structlog
|
||||||
from bleach import clean
|
from bleach import clean
|
||||||
from djmoney.money import Money
|
from djmoney.money import Money
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
@ -31,7 +31,7 @@ from common.currency import currency_code_default
|
|||||||
|
|
||||||
from .settings import MEDIA_URL, STATIC_URL
|
from .settings import MEDIA_URL, STATIC_URL
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def extract_int(reference, clip=0x7FFFFFFF, allow_negative=False):
|
def extract_int(reference, clip=0x7FFFFFFF, allow_negative=False):
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
"""Code for managing email functionality in InvenTree."""
|
"""Code for managing email functionality in InvenTree."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core import mail as django_mail
|
from django.core import mail as django_mail
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def is_email_configured():
|
def is_email_configured():
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Provides helper functions used throughout the InvenTree project that access the database."""
|
"""Provides helper functions used throughout the InvenTree project that access the database."""
|
||||||
|
|
||||||
import io
|
import io
|
||||||
import logging
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
@ -12,6 +11,7 @@ from django.db.utils import OperationalError, ProgrammingError
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from djmoney.money import Money
|
from djmoney.money import Money
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
@ -24,7 +24,7 @@ from common.notifications import (
|
|||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from InvenTree.format import format_money
|
from InvenTree.format import format_money
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def get_base_url(request=None):
|
def get_base_url(request=None):
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""Check if there are any pending database migrations, and run them."""
|
"""Check if there are any pending database migrations, and run them."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from InvenTree.tasks import check_for_migrations
|
from InvenTree.tasks import check_for_migrations
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
"""Custom management command to cleanup old settings that are not defined anymore."""
|
"""Custom management command to cleanup old settings that are not defined anymore."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -3,13 +3,12 @@
|
|||||||
- This is crucial after importing any fixtures, etc
|
- This is crucial after importing any fixtures, etc
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
import structlog
|
||||||
from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode
|
from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
- May be required after importing a new dataset, for example
|
- May be required after importing a new dataset, for example
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
from PIL import UnidentifiedImageError
|
from PIL import UnidentifiedImageError
|
||||||
|
|
||||||
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 = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""Check if there are any pending database migrations, and run them."""
|
"""Check if there are any pending database migrations, and run them."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from InvenTree.tasks import check_for_migrations
|
from InvenTree.tasks import check_for_migrations
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
"""Custom metadata for DRF."""
|
"""Custom metadata for DRF."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
|
||||||
|
import structlog
|
||||||
from rest_framework import exceptions, serializers
|
from rest_framework import exceptions, serializers
|
||||||
from rest_framework.fields import empty
|
from rest_framework.fields import empty
|
||||||
from rest_framework.metadata import SimpleMetadata
|
from rest_framework.metadata import SimpleMetadata
|
||||||
@ -17,7 +16,7 @@ import users.models
|
|||||||
from InvenTree.helpers import str2bool
|
from InvenTree.helpers import str2bool
|
||||||
from InvenTree.serializers import DependentField
|
from InvenTree.serializers import DependentField
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeMetadata(SimpleMetadata):
|
class InvenTreeMetadata(SimpleMetadata):
|
||||||
@ -389,7 +388,9 @@ class InvenTreeMetadata(SimpleMetadata):
|
|||||||
model = field.queryset.model
|
model = field.queryset.model
|
||||||
else:
|
else:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
'Could not extract model for:', field_info.get('label'), '->', field
|
'Could not extract model for: %s -> %s',
|
||||||
|
field_info.get('label'),
|
||||||
|
field,
|
||||||
)
|
)
|
||||||
model = None
|
model = None
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Middleware for InvenTree."""
|
"""Middleware for InvenTree."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -9,6 +8,7 @@ from django.http import HttpResponse
|
|||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import Resolver404, include, path, resolve, reverse_lazy
|
from django.urls import Resolver404, include, path, resolve, reverse_lazy
|
||||||
|
|
||||||
|
import structlog
|
||||||
from allauth_2fa.middleware import AllauthTwoFactorMiddleware, BaseRequire2FAMiddleware
|
from allauth_2fa.middleware import AllauthTwoFactorMiddleware, BaseRequire2FAMiddleware
|
||||||
from error_report.middleware import ExceptionProcessor
|
from error_report.middleware import ExceptionProcessor
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ from common.settings import get_global_setting
|
|||||||
from InvenTree.urls import frontendpatterns
|
from InvenTree.urls import frontendpatterns
|
||||||
from users.models import ApiToken
|
from users.models import ApiToken
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def get_token_from_request(request):
|
def get_token_from_request(request):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Generic models which provide extra functionality over base Django model types."""
|
"""Generic models which provide extra functionality over base Django model types."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from string import Formatter
|
from string import Formatter
|
||||||
|
|
||||||
@ -14,6 +13,7 @@ from django.urls import reverse
|
|||||||
from django.urls.exceptions import NoReverseMatch
|
from django.urls.exceptions import NoReverseMatch
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from django_q.models import Task
|
from django_q.models import Task
|
||||||
from error_report.models import Error
|
from error_report.models import Error
|
||||||
from mptt.exceptions import InvalidMove
|
from mptt.exceptions import InvalidMove
|
||||||
@ -25,7 +25,7 @@ import InvenTree.format
|
|||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
import InvenTree.helpers_model
|
import InvenTree.helpers_model
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class DiffMixin:
|
class DiffMixin:
|
||||||
|
@ -1,19 +1,18 @@
|
|||||||
"""Configuration for Sentry.io error reporting."""
|
"""Configuration for Sentry.io error reporting."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
|
||||||
import rest_framework.exceptions
|
import rest_framework.exceptions
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.exceptions import MissingRate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from sentry_sdk.integrations.django import DjangoIntegration
|
from sentry_sdk.integrations.django import DjangoIntegration
|
||||||
|
|
||||||
import InvenTree.version
|
import InvenTree.version
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def default_sentry_dsn():
|
def default_sentry_dsn():
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""API endpoints for social authentication with allauth."""
|
"""API endpoints for social authentication with allauth."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import NoReverseMatch, include, path, reverse
|
from django.urls import NoReverseMatch, include, path, reverse
|
||||||
|
|
||||||
import allauth.socialaccount.providers.openid_connect.views as oidc_views
|
import allauth.socialaccount.providers.openid_connect.views as oidc_views
|
||||||
|
import structlog
|
||||||
from allauth.account.models import EmailAddress
|
from allauth.account.models import EmailAddress
|
||||||
from allauth.socialaccount import providers
|
from allauth.socialaccount import providers
|
||||||
from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter, OAuth2LoginView
|
from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter, OAuth2LoginView
|
||||||
@ -22,7 +22,7 @@ from InvenTree.auth_overrides import registration_enabled
|
|||||||
from InvenTree.mixins import CreateAPI, ListAPI, ListCreateAPI
|
from InvenTree.mixins import CreateAPI, ListAPI, ListCreateAPI
|
||||||
from InvenTree.serializers import EmptySerializer, InvenTreeModelSerializer
|
from InvenTree.serializers import EmptySerializer, InvenTreeModelSerializer
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class GenericOAuth2ApiLoginView(OAuth2LoginView):
|
class GenericOAuth2ApiLoginView(OAuth2LoginView):
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
"""Helper functions for Single Sign On functionality."""
|
"""Helper functions for Single Sign On functionality."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
import structlog
|
||||||
from allauth.socialaccount.models import SocialAccount, SocialLogin
|
from allauth.socialaccount.models import SocialAccount, SocialLogin
|
||||||
|
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from InvenTree.helpers import str2bool
|
from InvenTree.helpers import str2bool
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def get_provider_app(provider):
|
def get_provider_app(provider):
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
"""Provides system status functionality checks."""
|
"""Provides system status functionality checks."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
import structlog
|
||||||
from django_q.models import Success
|
from django_q.models import Success
|
||||||
from django_q.status import Stat
|
from django_q.status import Stat
|
||||||
|
|
||||||
import InvenTree.helpers_email
|
import InvenTree.helpers_email
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def is_worker_running(**kwargs):
|
def is_worker_running(**kwargs):
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Functions for tasks and a few general async tasks."""
|
"""Functions for tasks and a few general async tasks."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
@ -21,6 +20,7 @@ from django.db.utils import NotSupportedError, OperationalError, ProgrammingErro
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import structlog
|
||||||
from maintenance_mode.core import (
|
from maintenance_mode.core import (
|
||||||
get_maintenance_mode,
|
get_maintenance_mode,
|
||||||
maintenance_mode_on,
|
maintenance_mode_on,
|
||||||
@ -33,7 +33,7 @@ from plugin import registry
|
|||||||
|
|
||||||
from .version import isInvenTreeUpToDate
|
from .version import isInvenTreeUpToDate
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def schedule_task(taskname, **kwargs):
|
def schedule_task(taskname, **kwargs):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""This module provides template tags for extra functionality, over and above the built-in Django tags."""
|
"""This module provides template tags for extra functionality, over and above the built-in Django tags."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
@ -22,7 +21,9 @@ from plugin.plugin import InvenTreePlugin
|
|||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
|
@ -1357,14 +1357,17 @@ class TestOffloadTask(InvenTreeTestCase):
|
|||||||
# First call should run without issue
|
# First call should run without issue
|
||||||
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
self.assertIn("Logging task attempt for 'dummy_task'", str(cm.output))
|
self.assertIn(
|
||||||
|
'Logging task attempt for dummy_task', str(cm.output).replace("\\'", '')
|
||||||
|
)
|
||||||
|
|
||||||
with self.assertLogs(logger='inventree', level='INFO') as cm:
|
with self.assertLogs(logger='inventree', level='INFO') as cm:
|
||||||
# An attempt has been logged, but it is too recent
|
# An attempt has been logged, but it is too recent
|
||||||
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
||||||
self.assertFalse(result)
|
self.assertFalse(result)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
"Last attempt for 'dummy_task' was too recent", str(cm.output)
|
'Last attempt for dummy_task was too recent',
|
||||||
|
str(cm.output).replace("\\'", ''),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Mark last attempt a few days ago - should now return True
|
# Mark last attempt a few days ago - should now return True
|
||||||
@ -1385,7 +1388,8 @@ class TestOffloadTask(InvenTreeTestCase):
|
|||||||
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
result = InvenTree.tasks.check_daily_holdoff('dummy_task')
|
||||||
self.assertFalse(result)
|
self.assertFalse(result)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
"Last attempt for 'dummy_task' was too recent", str(cm.output)
|
'Last attempt for dummy_task was too recent',
|
||||||
|
str(cm.output).replace("\\'", ''),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure so a task was successful too recently
|
# Configure so a task was successful too recently
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
Provides information on the current InvenTree version
|
Provides information on the current InvenTree version
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import platform
|
import platform
|
||||||
@ -21,7 +20,9 @@ from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION
|
|||||||
INVENTREE_SW_VERSION = '0.18.0 dev'
|
INVENTREE_SW_VERSION = '0.18.0 dev'
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# Discover git
|
# Discover git
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Build database model definitions."""
|
"""Build database model definitions."""
|
||||||
|
|
||||||
import decimal
|
import decimal
|
||||||
import logging
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
@ -15,6 +14,7 @@ from django.dispatch.dispatcher import receiver
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from mptt.exceptions import InvalidMove
|
from mptt.exceptions import InvalidMove
|
||||||
from mptt.models import MPTTModel, TreeForeignKey
|
from mptt.models import MPTTModel, TreeForeignKey
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
@ -47,7 +47,7 @@ from generic.states import StateTransitionMixin, StatusCodeMixin
|
|||||||
from plugin.events import trigger_event
|
from plugin.events import trigger_event
|
||||||
from stock.status_codes import StockHistoryCode, StockStatus
|
from stock.status_codes import StockHistoryCode, StockStatus
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class Build(
|
class Build(
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Background task definitions for the BuildOrder app."""
|
"""Background task definitions for the BuildOrder app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
@ -11,6 +10,7 @@ from django.db import transaction
|
|||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from allauth.account.models import EmailAddress
|
from allauth.account.models import EmailAddress
|
||||||
|
|
||||||
import build.models as build_models
|
import build.models as build_models
|
||||||
@ -25,7 +25,7 @@ from build.status_codes import BuildStatusGroups
|
|||||||
from InvenTree.ready import isImportingData
|
from InvenTree.ready import isImportingData
|
||||||
from plugin.events import trigger_event
|
from plugin.events import trigger_event
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def auto_allocate_build(build_id: int, **kwargs):
|
def auto_allocate_build(build_id: int, **kwargs):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Unit tests for the 'build' models."""
|
"""Unit tests for the 'build' models."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
@ -11,6 +10,8 @@ from django.db.models import Sum
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import build.tasks
|
import build.tasks
|
||||||
import common.models
|
import common.models
|
||||||
from build.models import Build, BuildItem, BuildLine, generate_next_build_reference
|
from build.models import Build, BuildItem, BuildLine, generate_next_build_reference
|
||||||
@ -22,7 +23,7 @@ from part.models import BomItem, BomItemSubstitute, Part, PartTestTemplate
|
|||||||
from stock.models import StockItem, StockItemTestResult
|
from stock.models import StockItem, StockItemTestResult
|
||||||
from users.models import Owner
|
from users.models import Owner
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class BuildTestBase(TestCase):
|
class BuildTestBase(TestCase):
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""App config for common app."""
|
"""App config for common app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
from common.settings import get_global_setting, set_global_setting
|
from common.settings import get_global_setting, set_global_setting
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class CommonConfig(AppConfig):
|
class CommonConfig(AppConfig):
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Helper functions for currency support."""
|
"""Helper functions for currency support."""
|
||||||
|
|
||||||
import decimal
|
import decimal
|
||||||
import logging
|
|
||||||
import math
|
import math
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@ -9,11 +8,12 @@ from django.core.cache import cache
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from moneyed import CURRENCIES
|
from moneyed import CURRENCIES
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def currency_code_default():
|
def currency_code_default():
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Icon utilities for InvenTree."""
|
"""Icon utilities for InvenTree."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TypedDict
|
from typing import TypedDict
|
||||||
@ -9,7 +8,9 @@ from typing import TypedDict
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.templatetags.static import static
|
from django.templatetags.static import static
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
_icon_packs = None
|
_icon_packs = None
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import base64
|
|||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
from datetime import timedelta, timezone
|
from datetime import timedelta, timezone
|
||||||
@ -34,6 +33,7 @@ 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 django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.exceptions import MissingRate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
@ -54,7 +54,7 @@ from generic.states import ColorEnum
|
|||||||
from generic.states.custom import state_color_mappings
|
from generic.states.custom import state_color_mappings
|
||||||
from InvenTree.sanitizer import sanitize_svg
|
from InvenTree.sanitizer import sanitize_svg
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class MetaMixin(models.Model):
|
class MetaMixin(models.Model):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Base classes and functions for notifications."""
|
"""Base classes and functions for notifications."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@ -9,6 +8,8 @@ from django.contrib.auth import get_user_model
|
|||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from InvenTree.ready import isImportingData, isRebuildingData
|
from InvenTree.ready import isImportingData, isRebuildingData
|
||||||
@ -16,7 +17,7 @@ from plugin import registry
|
|||||||
from plugin.models import NotificationUserSetting, PluginConfig
|
from plugin.models import NotificationUserSetting, PluginConfig
|
||||||
from users.models import Owner
|
from users.models import Owner
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# region methods
|
# region methods
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Tasks (processes that get offloaded) for common app."""
|
"""Tasks (processes that get offloaded) for common app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
@ -11,13 +10,14 @@ from django.utils import timezone
|
|||||||
|
|
||||||
import feedparser
|
import feedparser
|
||||||
import requests
|
import requests
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from InvenTree.helpers_model import getModelsWithMixin
|
from InvenTree.helpers_model import getModelsWithMixin
|
||||||
from InvenTree.models import InvenTreeNotesMixin
|
from InvenTree.models import InvenTreeNotesMixin
|
||||||
from InvenTree.tasks import ScheduledTask, scheduled_task
|
from InvenTree.tasks import ScheduledTask, scheduled_task
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
@scheduled_task(ScheduledTask.DAILY)
|
@scheduled_task(ScheduledTask.DAILY)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Model definitions for the 'importer' app."""
|
"""Model definitions for the 'importer' app."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import logging
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
@ -11,6 +10,7 @@ from django.db import models
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from rest_framework.exceptions import ValidationError as DRFValidationError
|
from rest_framework.exceptions import ValidationError as DRFValidationError
|
||||||
|
|
||||||
import importer.operations
|
import importer.operations
|
||||||
@ -20,7 +20,7 @@ import importer.validators
|
|||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from importer.status_codes import DataImportStatusCode
|
from importer.status_codes import DataImportStatusCode
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class DataImportSession(models.Model):
|
class DataImportSession(models.Model):
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
"""Registry for supported serializers for data import operations."""
|
"""Registry for supported serializers for data import operations."""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
|
|
||||||
from importer.mixins import DataImportSerializerMixin
|
from importer.mixins import DataImportSerializerMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class DataImportSerializerRegister:
|
class DataImportSerializerRegister:
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
"""Task definitions for the 'importer' app."""
|
"""Task definitions for the 'importer' app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def import_data(session_id: int):
|
def import_data(session_id: int):
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
"""Django machine app config."""
|
"""Django machine app config."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from InvenTree.ready import (
|
from InvenTree.ready import (
|
||||||
canAppAccessDatabase,
|
canAppAccessDatabase,
|
||||||
isImportingData,
|
isImportingData,
|
||||||
@ -13,7 +13,7 @@ from InvenTree.ready import (
|
|||||||
isRunningMigrations,
|
isRunningMigrations,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class MachineConfig(AppConfig):
|
class MachineConfig(AppConfig):
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
"""Machine registry."""
|
"""Machine registry."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import Union, cast
|
from typing import Union, cast
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from InvenTree.helpers_mixin import get_shared_class_instance_state_mixin
|
from InvenTree.helpers_mixin import get_shared_class_instance_state_mixin
|
||||||
from machine.machine_type import BaseDriver, BaseMachineType
|
from machine.machine_type import BaseDriver, BaseMachineType
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class MachineRegistry(
|
class MachineRegistry(
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Order model definitions."""
|
"""Order model definitions."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
@ -15,6 +14,7 @@ from django.dispatch.dispatcher import receiver
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.exceptions import MissingRate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from djmoney.money import Money
|
from djmoney.money import Money
|
||||||
@ -58,7 +58,7 @@ from part import models as PartModels
|
|||||||
from plugin.events import trigger_event
|
from plugin.events import trigger_event
|
||||||
from stock.status_codes import StockHistoryCode, StockStatus
|
from stock.status_codes import StockHistoryCode, StockStatus
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class TotalPriceMixin(models.Model):
|
class TotalPriceMixin(models.Model):
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
"""Background tasks for the 'order' app."""
|
"""Background tasks for the 'order' app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import common.notifications
|
import common.notifications
|
||||||
import InvenTree.helpers_model
|
import InvenTree.helpers_model
|
||||||
import order.models
|
import order.models
|
||||||
@ -15,7 +16,7 @@ from order.events import PurchaseOrderEvents, SalesOrderEvents
|
|||||||
from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups
|
from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups
|
||||||
from plugin.events import trigger_event
|
from plugin.events import trigger_event
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def notify_overdue_purchase_order(po: order.models.PurchaseOrder):
|
def notify_overdue_purchase_order(po: order.models.PurchaseOrder):
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""part app specification."""
|
"""part app specification."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class PartConfig(AppConfig):
|
class PartConfig(AppConfig):
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
"""Various helper functions for the part app."""
|
"""Various helper functions for the part app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
import structlog
|
||||||
from jinja2 import Environment, select_autoescape
|
from jinja2 import Environment, select_autoescape
|
||||||
|
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# Compiled template for rendering the 'full_name' attribute of a Part
|
# Compiled template for rendering the 'full_name' attribute of a Part
|
||||||
|
@ -5,7 +5,6 @@ from __future__ import annotations
|
|||||||
import decimal
|
import decimal
|
||||||
import hashlib
|
import hashlib
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -25,6 +24,7 @@ from django.dispatch import receiver
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
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 djmoney.contrib.exchange.models import convert_money
|
||||||
@ -67,7 +67,7 @@ from order.status_codes import (
|
|||||||
)
|
)
|
||||||
from stock import models as StockModels
|
from stock import models as StockModels
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class PartCategory(InvenTree.models.InvenTreeTree):
|
class PartCategory(InvenTree.models.InvenTreeTree):
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import imghdr
|
import imghdr
|
||||||
import io
|
import io
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
@ -15,6 +14,7 @@ from django.db.models.functions import Coalesce
|
|||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.exceptions import MissingRate
|
from djmoney.contrib.exchange.exceptions import MissingRate
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
@ -56,7 +56,7 @@ from .models import (
|
|||||||
PartTestTemplate,
|
PartTestTemplate,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
@register_importer()
|
@register_importer()
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""Stocktake report functionality."""
|
"""Stocktake report functionality."""
|
||||||
|
|
||||||
import io
|
import io
|
||||||
import logging
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
import tablib
|
import tablib
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from djmoney.money import Money
|
from djmoney.money import Money
|
||||||
@ -18,7 +18,7 @@ import InvenTree.helpers
|
|||||||
import part.models
|
import part.models
|
||||||
import stock.models
|
import stock.models
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def perform_stocktake(
|
def perform_stocktake(
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Background task definitions for the 'part' app."""
|
"""Background task definitions for the 'part' app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
@ -8,6 +7,8 @@ from datetime import datetime, timedelta
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import common.currency
|
import common.currency
|
||||||
import common.notifications
|
import common.notifications
|
||||||
import company.models
|
import company.models
|
||||||
@ -24,7 +25,7 @@ from InvenTree.tasks import (
|
|||||||
scheduled_task,
|
scheduled_task,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def notify_low_stock(part: part_models.Part):
|
def notify_low_stock(part: part_models.Part):
|
||||||
|
@ -4,16 +4,15 @@ This initializes the plugin mechanisms and handles reloading throughout the life
|
|||||||
The main code for plugin special sauce is in the plugin registry in `InvenTree/plugin/registry.py`.
|
The main code for plugin special sauce is in the plugin registry in `InvenTree/plugin/registry.py`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
import structlog
|
||||||
from maintenance_mode.core import set_maintenance_mode
|
from maintenance_mode.core import set_maintenance_mode
|
||||||
|
|
||||||
from InvenTree.ready import canAppAccessDatabase, isInMainThread, isInWorkerThread
|
from InvenTree.ready import canAppAccessDatabase, isInMainThread, isInWorkerThread
|
||||||
from plugin import registry
|
from plugin import registry
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class PluginAppConfig(AppConfig):
|
class PluginAppConfig(AppConfig):
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
"""API endpoints for barcode plugins."""
|
"""API endpoints for barcode plugins."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.urls import include, path
|
from django.urls import include, path
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from django_filters import rest_framework as rest_filters
|
from django_filters import rest_framework as rest_filters
|
||||||
from drf_spectacular.utils import extend_schema, extend_schema_view
|
from drf_spectacular.utils import extend_schema, extend_schema_view
|
||||||
from rest_framework import permissions, status
|
from rest_framework import permissions, status
|
||||||
@ -29,7 +28,7 @@ from users.models import RuleSet
|
|||||||
|
|
||||||
from . import serializers as barcode_serializers
|
from . import serializers as barcode_serializers
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class BarcodeView(CreateAPIView):
|
class BarcodeView(CreateAPIView):
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
"""Helper functions for barcode generation."""
|
"""Helper functions for barcode generation."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import Type, cast
|
from typing import Type, cast
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.helpers_model
|
import InvenTree.helpers_model
|
||||||
from InvenTree.models import InvenTreeBarcodeMixin
|
from InvenTree.models import InvenTreeBarcodeMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def cache(func):
|
def cache(func):
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from company.models import Company, ManufacturerPart, SupplierPart
|
from company.models import Company, ManufacturerPart, SupplierPart
|
||||||
from InvenTree.exceptions import log_error
|
from InvenTree.exceptions import log_error
|
||||||
from InvenTree.models import InvenTreeBarcodeMixin
|
from InvenTree.models import InvenTreeBarcodeMixin
|
||||||
@ -15,7 +15,7 @@ from order.models import PurchaseOrder
|
|||||||
from part.models import Part
|
from part.models import Part
|
||||||
from plugin.base.integration.SettingsMixin import SettingsMixin
|
from plugin.base.integration.SettingsMixin import SettingsMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class BarcodeMixin:
|
class BarcodeMixin:
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
"""Functions for triggering and responding to server side events."""
|
"""Functions for triggering and responding to server side events."""
|
||||||
|
|
||||||
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_delete, post_save
|
from django.db.models.signals import post_delete, post_save
|
||||||
from django.dispatch.dispatcher import receiver
|
from django.dispatch.dispatcher import receiver
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.exceptions
|
import InvenTree.exceptions
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
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 = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def trigger_event(event: str, *args, **kwargs) -> None:
|
def trigger_event(event: str, *args, **kwargs) -> None:
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
"""Plugin mixin classes for icon pack plugin."""
|
"""Plugin mixin classes for icon pack plugin."""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from common.icons import IconPack, reload_icon_packs
|
from common.icons import IconPack, reload_icon_packs
|
||||||
from plugin.helpers import MixinNotImplementedError
|
from plugin.helpers import MixinNotImplementedError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class IconPackMixin:
|
class IconPackMixin:
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
"""Mixin class for making calls to an external API."""
|
"""Mixin class for making calls to an external API."""
|
||||||
|
|
||||||
import json as json_pkg
|
import json as json_pkg
|
||||||
import logging
|
|
||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
import structlog
|
||||||
|
|
||||||
from plugin.helpers import MixinNotImplementedError
|
from plugin.helpers import MixinNotImplementedError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class APICallMixin:
|
class APICallMixin:
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Plugin mixin class for AppMixin."""
|
"""Plugin mixin class for AppMixin."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from importlib import reload
|
from importlib import reload
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@ -9,9 +8,11 @@ from django.apps import apps
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from InvenTree.config import get_plugin_dir
|
from InvenTree.config import get_plugin_dir
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class AppMixin:
|
class AppMixin:
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
Allows integration of custom 'panels' into the user interface.
|
Allows integration of custom 'panels' into the user interface.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from InvenTree.helpers import generateTestKey
|
from InvenTree.helpers import generateTestKey
|
||||||
from plugin.helpers import MixinNotImplementedError, render_template, render_text
|
from plugin.helpers import MixinNotImplementedError, render_template, render_text
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class PanelMixin:
|
class PanelMixin:
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
"""Plugin mixin class for ScheduleMixin."""
|
"""Plugin mixin class for ScheduleMixin."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from plugin.helpers import MixinImplementationError
|
from plugin.helpers import MixinImplementationError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class ScheduleMixin:
|
class ScheduleMixin:
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
"""Plugin mixin class for SettingsMixin."""
|
"""Plugin mixin class for SettingsMixin."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
# import only for typechecking, otherwise this throws a model is unready error
|
# import only for typechecking, otherwise this throws a model is unready error
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
"""Plugin mixin class for UrlsMixin."""
|
"""Plugin mixin class for UrlsMixin."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import include, re_path
|
from django.urls import include, re_path
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from plugin.urls import PLUGIN_BASE
|
from plugin.urls import PLUGIN_BASE
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class UrlsMixin:
|
class UrlsMixin:
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
"""Plugin mixin classes."""
|
"""Plugin mixin classes."""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from plugin.helpers import MixinNotImplementedError
|
from plugin.helpers import MixinNotImplementedError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class NavigationMixin:
|
class NavigationMixin:
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
"""Functions to print a label to a mixin printer."""
|
"""Functions to print a label to a mixin printer."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import common.notifications
|
import common.notifications
|
||||||
from InvenTree.exceptions import log_error
|
from InvenTree.exceptions import log_error
|
||||||
from plugin.registry import registry
|
from plugin.registry import registry
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def print_label(plugin_slug: str, **kwargs):
|
def print_label(plugin_slug: str, **kwargs):
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
"""Plugin mixin for locating stock items and locations."""
|
"""Plugin mixin for locating stock items and locations."""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from plugin.helpers import MixinNotImplementedError
|
from plugin.helpers import MixinNotImplementedError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class LocateMixin:
|
class LocateMixin:
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
Allows integration of custom UI elements into the React user interface.
|
Allows integration of custom UI elements into the React user interface.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
from typing import Literal, TypedDict
|
from typing import Literal, TypedDict
|
||||||
|
|
||||||
|
import structlog
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# List of supported feature types
|
# List of supported feature types
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""Builtin plugin for requesting exchange rates from an external API."""
|
"""Builtin plugin for requesting exchange rates from an external API."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from plugin import InvenTreePlugin
|
from plugin import InvenTreePlugin
|
||||||
from plugin.mixins import APICallMixin, CurrencyExchangeMixin
|
from plugin.mixins import APICallMixin, CurrencyExchangeMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeCurrencyExchange(APICallMixin, CurrencyExchangeMixin, InvenTreePlugin):
|
class InvenTreeCurrencyExchange(APICallMixin, CurrencyExchangeMixin, InvenTreePlugin):
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""Label printing plugin which supports printing multiple labels on a single page."""
|
"""Label printing plugin which supports printing multiple labels on a single page."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
import weasyprint
|
import weasyprint
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ from plugin import InvenTreePlugin
|
|||||||
from plugin.mixins import LabelPrintingMixin, SettingsMixin
|
from plugin.mixins import LabelPrintingMixin, SettingsMixin
|
||||||
from report.models import LabelOutput, LabelTemplate
|
from report.models import LabelOutput, LabelTemplate
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class LabelPrintingOptionsSerializer(serializers.Serializer):
|
class LabelPrintingOptionsSerializer(serializers.Serializer):
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Helpers for plugin app."""
|
"""Helpers for plugin app."""
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import pkgutil
|
import pkgutil
|
||||||
@ -16,7 +15,9 @@ from django.conf import settings
|
|||||||
from django.core.exceptions import AppRegistryNotReady
|
from django.core.exceptions import AppRegistryNotReady
|
||||||
from django.db.utils import IntegrityError
|
from django.db.utils import IntegrityError
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# region logging / errors
|
# region logging / errors
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""Install a plugin into the python virtual environment."""
|
"""Install a plugin into the python virtual environment."""
|
||||||
|
|
||||||
import logging
|
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@ -9,11 +8,13 @@ from django.conf import settings
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import plugin.models
|
import plugin.models
|
||||||
import plugin.staticfiles
|
import plugin.staticfiles
|
||||||
from InvenTree.exceptions import log_error
|
from InvenTree.exceptions import log_error
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def pip_command(*args):
|
def pip_command(*args):
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Base Class for InvenTree plugins."""
|
"""Base Class for InvenTree plugins."""
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
|
||||||
import warnings
|
import warnings
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from distutils.sysconfig import get_python_lib
|
from distutils.sysconfig import get_python_lib
|
||||||
@ -13,10 +12,12 @@ from django.conf import settings
|
|||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from plugin.helpers import get_git_log
|
from plugin.helpers import get_git_log
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class MetaBase:
|
class MetaBase:
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
import importlib
|
import importlib
|
||||||
import importlib.machinery
|
import importlib.machinery
|
||||||
import importlib.util
|
import importlib.util
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@ -25,6 +24,8 @@ from django.urls import clear_url_caches, path
|
|||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from common.settings import get_global_setting, set_global_setting
|
from common.settings import get_global_setting, set_global_setting
|
||||||
from InvenTree.config import get_plugin_dir
|
from InvenTree.config import get_plugin_dir
|
||||||
from InvenTree.ready import canAppAccessDatabase
|
from InvenTree.ready import canAppAccessDatabase
|
||||||
@ -38,7 +39,7 @@ from .helpers import (
|
|||||||
)
|
)
|
||||||
from .plugin import InvenTreePlugin
|
from .plugin import InvenTreePlugin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class PluginsRegistry:
|
class PluginsRegistry:
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""Sample plugin which responds to events."""
|
"""Sample plugin which responds to events."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from plugin import InvenTreePlugin
|
from plugin import InvenTreePlugin
|
||||||
from plugin.mixins import EventMixin
|
from plugin.mixins import EventMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class EventPluginSample(EventMixin, InvenTreePlugin):
|
class EventPluginSample(EventMixin, InvenTreePlugin):
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""Sample plugin which responds to events."""
|
"""Sample plugin which responds to events."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from plugin import InvenTreePlugin
|
from plugin import InvenTreePlugin
|
||||||
from plugin.mixins import EventMixin
|
from plugin.mixins import EventMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class FilteredEventPluginSample(EventMixin, InvenTreePlugin):
|
class FilteredEventPluginSample(EventMixin, InvenTreePlugin):
|
||||||
|
@ -9,8 +9,6 @@ from plugin.base.event.events import trigger_event
|
|||||||
from plugin.helpers import MixinNotImplementedError
|
from plugin.helpers import MixinNotImplementedError
|
||||||
from plugin.mixins import EventMixin
|
from plugin.mixins import EventMixin
|
||||||
|
|
||||||
from .event_sample import logger
|
|
||||||
|
|
||||||
|
|
||||||
class EventPluginSampleTests(TestCase):
|
class EventPluginSampleTests(TestCase):
|
||||||
"""Tests for EventPluginSample."""
|
"""Tests for EventPluginSample."""
|
||||||
@ -27,11 +25,9 @@ class EventPluginSampleTests(TestCase):
|
|||||||
# Enable event testing
|
# Enable event testing
|
||||||
settings.PLUGIN_TESTING_EVENTS = True
|
settings.PLUGIN_TESTING_EVENTS = True
|
||||||
# Check that an event is issued
|
# Check that an event is issued
|
||||||
with self.assertLogs(logger=logger, level='DEBUG') as cm:
|
with self.assertLogs(logger='inventree', level='DEBUG') as cm:
|
||||||
trigger_event('test.event')
|
trigger_event('test.event')
|
||||||
self.assertIn(
|
self.assertIn('Event `test.event` triggered in sample plugin', str(cm[1]))
|
||||||
'DEBUG:inventree:Event `test.event` triggered in sample plugin', cm[1]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Disable again
|
# Disable again
|
||||||
settings.PLUGIN_TESTING_EVENTS = False
|
settings.PLUGIN_TESTING_EVENTS = False
|
||||||
|
@ -7,8 +7,6 @@ from common.models import InvenTreeSetting
|
|||||||
from plugin import registry
|
from plugin import registry
|
||||||
from plugin.base.event.events import trigger_event
|
from plugin.base.event.events import trigger_event
|
||||||
|
|
||||||
from .filtered_event_sample import logger
|
|
||||||
|
|
||||||
|
|
||||||
class FilteredEventPluginSampleTests(TestCase):
|
class FilteredEventPluginSampleTests(TestCase):
|
||||||
"""Tests for EventPluginSample."""
|
"""Tests for EventPluginSample."""
|
||||||
@ -25,11 +23,9 @@ class FilteredEventPluginSampleTests(TestCase):
|
|||||||
# Enable event testing
|
# Enable event testing
|
||||||
settings.PLUGIN_TESTING_EVENTS = True
|
settings.PLUGIN_TESTING_EVENTS = True
|
||||||
# Check that an event is issued
|
# Check that an event is issued
|
||||||
with self.assertLogs(logger=logger, level='DEBUG') as cm:
|
with self.assertLogs(logger='inventree', level='DEBUG') as cm:
|
||||||
trigger_event('test.event')
|
trigger_event('test.event')
|
||||||
self.assertIn(
|
self.assertIn('Event `test.event` triggered in sample plugin', str(cm[1]))
|
||||||
'DEBUG:inventree:Event `test.event` triggered in sample plugin', cm[1]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Disable again
|
# Disable again
|
||||||
settings.PLUGIN_TESTING_EVENTS = False
|
settings.PLUGIN_TESTING_EVENTS = False
|
||||||
@ -46,7 +42,7 @@ class FilteredEventPluginSampleTests(TestCase):
|
|||||||
# Enable event testing
|
# Enable event testing
|
||||||
settings.PLUGIN_TESTING_EVENTS = True
|
settings.PLUGIN_TESTING_EVENTS = True
|
||||||
# Check that an event is issued
|
# Check that an event is issued
|
||||||
with self.assertLogs(logger=logger, level='DEBUG') as cm:
|
with self.assertLogs(logger='inventree', level='DEBUG') as cm:
|
||||||
trigger_event('test.some.other.event')
|
trigger_event('test.some.other.event')
|
||||||
self.assertNotIn(
|
self.assertNotIn(
|
||||||
'DEBUG:inventree:Event `test.some.other.event` triggered in sample plugin',
|
'DEBUG:inventree:Event `test.some.other.event` triggered in sample plugin',
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
Note: This plugin does not *actually* locate anything!
|
Note: This plugin does not *actually* locate anything!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
from plugin import InvenTreePlugin
|
from plugin import InvenTreePlugin
|
||||||
from plugin.mixins import LocateMixin
|
from plugin.mixins import LocateMixin
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class SampleLocatePlugin(LocateMixin, InvenTreePlugin):
|
class SampleLocatePlugin(LocateMixin, InvenTreePlugin):
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""Static files management for InvenTree plugins."""
|
"""Static files management for InvenTree plugins."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from plugin.registry import registry
|
from plugin.registry import registry
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def clear_static_dir(path, recursive=True):
|
def clear_static_dir(path, recursive=True):
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
|
||||||
import os
|
import os
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from decimal import Decimal, InvalidOperation
|
from decimal import Decimal, InvalidOperation
|
||||||
@ -20,6 +19,7 @@ from django.dispatch import receiver
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from djmoney.contrib.exchange.models import convert_money
|
from djmoney.contrib.exchange.models import convert_money
|
||||||
from mptt.managers import TreeManager
|
from mptt.managers import TreeManager
|
||||||
from mptt.models import MPTTModel, TreeForeignKey
|
from mptt.models import MPTTModel, TreeForeignKey
|
||||||
@ -52,7 +52,7 @@ from stock.events import StockEvents
|
|||||||
from stock.generators import generate_batch_code
|
from stock.generators import generate_batch_code
|
||||||
from users.models import Owner
|
from users.models import Owner
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class StockLocationType(InvenTree.models.MetadataMixin, models.Model):
|
class StockLocationType(InvenTree.models.MetadataMixin, models.Model):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
"""JSON serializers for Stock app."""
|
"""JSON serializers for Stock app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
@ -10,6 +9,7 @@ from django.db.models import BooleanField, Case, Count, Prefetch, Q, Value, When
|
|||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
import structlog
|
||||||
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, SubquerySum
|
from sql_util.utils import SubqueryCount, SubquerySum
|
||||||
@ -40,7 +40,7 @@ from .models import (
|
|||||||
StockLocationType,
|
StockLocationType,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class GenerateBatchCodeSerializer(serializers.Serializer):
|
class GenerateBatchCodeSerializer(serializers.Serializer):
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
"""Background tasks for the stock app."""
|
"""Background tasks for the stock app."""
|
||||||
|
|
||||||
import logging
|
import structlog
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
def rebuild_stock_item_tree(tree_id=None):
|
def rebuild_stock_item_tree(tree_id=None):
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
"""App configuration class for the 'users' app."""
|
"""App configuration class for the 'users' app."""
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.db.utils import OperationalError, ProgrammingError
|
from django.db.utils import OperationalError, ProgrammingError
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
import InvenTree.ready
|
import InvenTree.ready
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
class UsersConfig(AppConfig):
|
class UsersConfig(AppConfig):
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Database model definitions for the 'users' app."""
|
"""Database model definitions for the 'users' app."""
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
@ -19,6 +18,7 @@ from django.dispatch import receiver
|
|||||||
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 _
|
||||||
|
|
||||||
|
import structlog
|
||||||
from rest_framework.authtoken.models import Token as AuthToken
|
from rest_framework.authtoken.models import Token as AuthToken
|
||||||
|
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
@ -26,7 +26,7 @@ import InvenTree.models
|
|||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from InvenTree.ready import canAppAccessDatabase, isImportingData
|
from InvenTree.ready import canAppAccessDatabase, isImportingData
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
# OVERRIDE START
|
# OVERRIDE START
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
"""Template tag to render SPA imports."""
|
"""Template tag to render SPA imports."""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
from logging import getLogger
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
@ -9,7 +8,9 @@ from django import template
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
logger = getLogger('InvenTree')
|
import structlog
|
||||||
|
|
||||||
|
logger = structlog.get_logger('inventree')
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
FRONTEND_SETTINGS = json.dumps(settings.FRONTEND_SETTINGS)
|
FRONTEND_SETTINGS = json.dumps(settings.FRONTEND_SETTINGS)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user