mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Pin django-stdimage to sub 6.0.0 (#3273)
* Pin django-stdimage to sub 6.0.0 - 6.0.0 breaks model serialization for background worker task - NFI why it does this * Fix requirements file * remove windows deps. and append requirements * Add unit tests for encoding and offloading tasks Co-authored-by: Matthias <code@mjmair.com>
This commit is contained in:
parent
73445b4b79
commit
efbef2dc90
@ -61,7 +61,7 @@ def raise_warning(msg):
|
|||||||
warnings.warn(msg)
|
warnings.warn(msg)
|
||||||
|
|
||||||
|
|
||||||
def offload_task(taskname, *args, force_sync=False, **kwargs):
|
def offload_task(taskname, *args, force_async=False, force_sync=False, **kwargs):
|
||||||
"""Create an AsyncTask if workers are running. This is different to a 'scheduled' task, in that it only runs once!
|
"""Create an AsyncTask if workers are running. This is different to a 'scheduled' task, in that it only runs once!
|
||||||
|
|
||||||
If workers are not running or force_sync flag
|
If workers are not running or force_sync flag
|
||||||
@ -79,7 +79,7 @@ def offload_task(taskname, *args, force_sync=False, **kwargs):
|
|||||||
except (OperationalError, ProgrammingError): # pragma: no cover
|
except (OperationalError, ProgrammingError): # pragma: no cover
|
||||||
raise_warning(f"Could not offload task '{taskname}' - database not ready")
|
raise_warning(f"Could not offload task '{taskname}' - database not ready")
|
||||||
|
|
||||||
if is_worker_running() and not force_sync: # pragma: no cover
|
if force_async or (is_worker_running() and not force_sync):
|
||||||
# Running as asynchronous task
|
# Running as asynchronous task
|
||||||
try:
|
try:
|
||||||
task = AsyncTask(taskname, *args, **kwargs)
|
task = AsyncTask(taskname, *args, **kwargs)
|
||||||
|
@ -20,9 +20,11 @@ from djmoney.money import Money
|
|||||||
import InvenTree.tasks
|
import InvenTree.tasks
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
from common.settings import currency_codes
|
from common.settings import currency_codes
|
||||||
from stock.models import StockLocation
|
from part.models import Part, PartCategory
|
||||||
|
from stock.models import StockItem, StockLocation
|
||||||
|
|
||||||
from . import config, helpers, ready, status, version
|
from . import config, helpers, ready, status, version
|
||||||
|
from .tasks import offload_task
|
||||||
from .validators import validate_overage, validate_part_name
|
from .validators import validate_overage, validate_part_name
|
||||||
|
|
||||||
|
|
||||||
@ -618,3 +620,48 @@ class TestInstanceName(helpers.InvenTreeTestCase):
|
|||||||
# The site should also be changed
|
# The site should also be changed
|
||||||
site_obj = Site.objects.all().order_by('id').first()
|
site_obj = Site.objects.all().order_by('id').first()
|
||||||
self.assertEqual(site_obj.domain, 'http://127.1.2.3')
|
self.assertEqual(site_obj.domain, 'http://127.1.2.3')
|
||||||
|
|
||||||
|
|
||||||
|
class TestOffloadTask(helpers.InvenTreeTestCase):
|
||||||
|
"""Tests for offloading tasks to the background worker"""
|
||||||
|
|
||||||
|
fixtures = [
|
||||||
|
'category',
|
||||||
|
'part',
|
||||||
|
'location',
|
||||||
|
'stock',
|
||||||
|
]
|
||||||
|
|
||||||
|
def test_offload_tasks(self):
|
||||||
|
"""Test that we can offload various tasks to the background worker thread.
|
||||||
|
|
||||||
|
This set of tests also ensures that various types of objects
|
||||||
|
can be encoded by the django-q serialization layer!
|
||||||
|
|
||||||
|
Note that as the background worker is not actually running for the tests,
|
||||||
|
the call to 'offload_task' won't really *do* anything!
|
||||||
|
|
||||||
|
However, it serves as a validation that object serialization works!
|
||||||
|
|
||||||
|
Ref: https://github.com/inventree/InvenTree/pull/3273
|
||||||
|
"""
|
||||||
|
|
||||||
|
offload_task(
|
||||||
|
'dummy_tasks.parts',
|
||||||
|
part=Part.objects.get(pk=1),
|
||||||
|
cat=PartCategory.objects.get(pk=1),
|
||||||
|
force_async=True
|
||||||
|
)
|
||||||
|
|
||||||
|
offload_task(
|
||||||
|
'dummy_tasks.stock',
|
||||||
|
item=StockItem.objects.get(pk=1),
|
||||||
|
loc=StockLocation.objects.get(pk=1),
|
||||||
|
force_async=True
|
||||||
|
)
|
||||||
|
|
||||||
|
offload_task(
|
||||||
|
'dummy_task.numbers',
|
||||||
|
1, 2, 3, 4, 5,
|
||||||
|
force_async=True
|
||||||
|
)
|
||||||
|
@ -18,7 +18,7 @@ django-redis>=5.0.0 # Redis integration
|
|||||||
django-q # Background task scheduling
|
django-q # Background task scheduling
|
||||||
django-sql-utils # Advanced query annotation / aggregation
|
django-sql-utils # Advanced query annotation / aggregation
|
||||||
django-sslserver # Secure HTTP development server
|
django-sslserver # Secure HTTP development server
|
||||||
django-stdimage # Advanced ImageField management
|
django-stdimage<6.0.0 # Advanced ImageField management # FIXED 2022-06-29 6.0.0 breaks serialization for django-q
|
||||||
django-user-sessions # user sessions in DB
|
django-user-sessions # user sessions in DB
|
||||||
django-weasyprint # django weasyprint integration
|
django-weasyprint # django weasyprint integration
|
||||||
djangorestframework # DRF framework
|
djangorestframework # DRF framework
|
||||||
|
@ -107,7 +107,7 @@ django-sql-utils==0.6.1
|
|||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
django-sslserver==0.22
|
django-sslserver==0.22
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
django-stdimage==6.0.1
|
django-stdimage==5.3.0
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
django-user-sessions==1.7.1
|
django-user-sessions==1.7.1
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
|
Loading…
Reference in New Issue
Block a user