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