wbcore 1.59.4__py2.py3-none-any.whl → 1.59.5__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,6 +15,7 @@ from wbcore.contrib.icons.models import IconField
15
15
  from wbcore.models import WBModel
16
16
  from wbcore.utils.itertools import get_inheriting_subclasses
17
17
  from wbcore.utils.models import DeleteToDisableMixin
18
+ from wbcore.workers import Queue
18
19
 
19
20
 
20
21
  class CalendarItem(DeleteToDisableMixin, WBModel):
@@ -219,7 +220,7 @@ def m2m_entities_changed(sender, instance, action, pk_set, **kwargs):
219
220
  transaction.on_commit(set_entity_list.s(instance.id).delay)
220
221
 
221
222
 
222
- @shared_task
223
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
223
224
  def set_entity_list(calendar_item_id: int):
224
225
  frontend_list = []
225
226
  with suppress(
@@ -9,6 +9,8 @@ from langchain_core.messages import BaseMessage
9
9
  from langchain_openai import ChatOpenAI
10
10
  from pydantic import BaseModel
11
11
 
12
+ from wbcore.workers import Queue
13
+
12
14
  from ..exceptions import APIStatusErrors, BadRequestErrors
13
15
  from .utils import run_llm
14
16
 
@@ -16,7 +18,7 @@ logger = logging.getLogger("llm")
16
18
 
17
19
 
18
20
  @shared_task(
19
- queue="llm",
21
+ queue=Queue.BACKGROUND.value,
20
22
  autoretry_for=tuple(APIStatusErrors),
21
23
  retry_backoff=10,
22
24
  max_retries=5, # retry 5 times maximum
@@ -1,8 +1,10 @@
1
1
  from celery import chain, shared_task
2
2
  from django.db.models import Model
3
3
 
4
+ from wbcore.workers import Queue
4
5
 
5
- @shared_task(queue="llm")
6
+
7
+ @shared_task(queue=Queue.BACKGROUND.value)
6
8
  def save_instance_as_task(instance):
7
9
  instance.save(_with_llm=False)
8
10
 
@@ -9,6 +9,8 @@ from django.dispatch import receiver
9
9
  from django.utils import timezone
10
10
  from django.utils.translation import gettext_lazy as _
11
11
 
12
+ from wbcore.workers import Queue
13
+
12
14
  from .users import User
13
15
 
14
16
  ACCESS_TOKEN_LIFETIME = settings.SIMPLE_JWT["ACCESS_TOKEN_LIFETIME"].seconds
@@ -97,7 +99,7 @@ def log_user_logged_in_success(sender, user, request, **kwargs):
97
99
  )
98
100
 
99
101
 
100
- @shared_task()
102
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
101
103
  def refresh_user_activity(user_id, refresh_time, jti):
102
104
  """
103
105
  Signal triggerd whenever a refresh token is submit from the frontend. Update latest_refresh to the associated UserActivity.
@@ -5,12 +5,13 @@ from celery import shared_task
5
5
  from django.utils import timezone
6
6
  from dynamic_preferences.registries import global_preferences_registry
7
7
 
8
+ from ...workers import Queue
8
9
  from .models import User
9
10
 
10
11
  logger = logging.getLogger(__name__)
11
12
 
12
13
 
13
- @shared_task
14
+ @shared_task(queue=Queue.BACKGROUND.value)
14
15
  def delete_unregistered_user_account(prune_user_account_before_datetime: datetime | None = None):
15
16
  if not prune_user_account_before_datetime:
16
17
  global_preferences = global_preferences_registry.manager()
@@ -25,6 +25,7 @@ from wbcore.contrib.authentication.models import User
25
25
  from wbcore.contrib.guardian.models.mixins import PermissionObjectModelMixin
26
26
  from wbcore.models import WBModel
27
27
  from wbcore.utils.html import convert_html2text
28
+ from wbcore.workers import Queue
28
29
 
29
30
  from .document_model_relationships import DocumentModelRelationship
30
31
  from .shareable_links import ShareableLink
@@ -238,7 +239,7 @@ class Document(PermissionObjectModelMixin, WBModel):
238
239
  verbose_name_plural = _("Documents")
239
240
 
240
241
 
241
- @shared_task
242
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
242
243
  def send_email_as_task(
243
244
  document_id,
244
245
  to_emails: List | str,
@@ -28,6 +28,7 @@ from wbcore.enums import RequestType
28
28
  from wbcore.metadata.configs.buttons import ActionButton
29
29
  from wbcore.models.orderable import OrderableModel
30
30
  from wbcore.utils.models import ActiveObjectManager, ComplexToStringMixin
31
+ from wbcore.workers import Queue
31
32
 
32
33
 
33
34
  def upload_to_profile_images(instance, filename):
@@ -592,7 +593,7 @@ class Match(ComplexToStringMixin, CalendarItem):
592
593
  permissions = [("change_match_status", "Change Match Status")]
593
594
 
594
595
 
595
- @shared_task
596
+ @shared_task(queue=Queue.DEFAULT.value)
596
597
  def start_match(match_id: int):
597
598
  """Sets the match status from scheduled to ongoing.
598
599
 
@@ -11,6 +11,7 @@ from wbcore.contrib.authentication.models.users import User
11
11
  from wbcore.contrib.guardian.utils import reload_permissions
12
12
  from wbcore.permissions.mixins import PermissionMixin
13
13
  from wbcore.utils.itertools import get_inheriting_subclasses
14
+ from wbcore.workers import Queue
14
15
 
15
16
 
16
17
  class PermissionObjectModelMixin(PermissionMixin):
@@ -113,7 +114,7 @@ def post_save_user(sender, instance, created, **kwargs):
113
114
  transaction.on_commit(lambda: assign_object_permissions_for_user_as_task.delay(instance.id)) # type: ignore
114
115
 
115
116
 
116
- @shared_task
117
+ @shared_task(queue=Queue.DEFAULT.value)
117
118
  def assign_user_permissions_for_object_as_task(
118
119
  content_type_id: int, instance_id: int, prune_existing: bool | None = True
119
120
  ):
@@ -127,7 +128,7 @@ def assign_user_permissions_for_object_as_task(
127
128
  instance.reload_permissions(prune_existing=prune_existing) # type: ignore
128
129
 
129
130
 
130
- @shared_task
131
+ @shared_task(queue=Queue.DEFAULT.value)
131
132
  def assign_object_permissions_for_user_as_task(user_id: int):
132
133
  """
133
134
  Utility function to create object permission from user decoupling from the main thread
@@ -1,9 +1,10 @@
1
1
  from celery import shared_task
2
2
  from wbcore.contrib.guardian.models.mixins import PermissionObjectModelMixin
3
3
  from wbcore.utils.itertools import get_inheriting_subclasses
4
+ from wbcore.workers import Queue
4
5
 
5
6
 
6
- @shared_task
7
+ @shared_task(queue=Queue.EXTENDED_BACKGROUND.value)
7
8
  def reload_permissions_as_task(prune_existing: bool | None = True, force_pruning: bool | None = False):
8
9
  for subclass in get_inheriting_subclasses(PermissionObjectModelMixin):
9
10
  for instance in subclass.objects.iterator():
@@ -9,6 +9,7 @@ from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage
9
9
  from modeltrans.fields import TranslatedVirtualField
10
10
 
11
11
  from wbcore.contrib.ai.llm.utils import run_llm
12
+ from wbcore.workers import Queue
12
13
 
13
14
  if TYPE_CHECKING:
14
15
  from django.db.models import Model
@@ -123,7 +124,7 @@ def translate_model(model: "Model", override: bool = False):
123
124
  model.save()
124
125
 
125
126
 
126
- @shared_task
127
+ @shared_task(queue=Queue.DEFAULT.value)
127
128
  def translate_model_as_task(content_type_id: int, pk: Any, override: bool = False):
128
129
  """
129
130
  Celery task for asynchronous translation of a model instance.
@@ -40,6 +40,7 @@ from wbcore.contrib.notifications.utils import create_notification_type
40
40
  from wbcore.utils.importlib import import_from_dotted_path
41
41
  from wbcore.utils.models import ComplexToStringMixin
42
42
 
43
+ from ...workers import Queue
43
44
  from .enums import ExportFormat, get_django_import_export_format
44
45
  from .signals import post_import
45
46
 
@@ -615,7 +616,7 @@ def pre_delete_source(sender, instance, **kwargs):
615
616
  ImportSource.objects.filter(source=instance).update(source=None)
616
617
 
617
618
 
618
- @shared_task(queue="importexport")
619
+ @shared_task(queue=Queue.BACKGROUND.value)
619
620
  def trigger_workflow_as_task(source_id: int, execution_time: datetime | None = None, **kwargs):
620
621
  """
621
622
  Call the `import_source` as a celery task
@@ -624,7 +625,7 @@ def trigger_workflow_as_task(source_id: int, execution_time: datetime | None = N
624
625
  source.trigger_workflow(execution_time=execution_time, **kwargs)
625
626
 
626
627
 
627
- @shared_task(queue="importexport")
628
+ @shared_task(queue=Queue.BACKGROUND.value)
628
629
  def generate_import_sources_as_task(source_id: int, execution_time: datetime, **kwargs) -> list[int]:
629
630
  """
630
631
  Call the `import_source` as a celery task
@@ -636,7 +637,7 @@ def generate_import_sources_as_task(source_id: int, execution_time: datetime, **
636
637
  return import_source_ids
637
638
 
638
639
 
639
- @shared_task(queue="importexport")
640
+ @shared_task(queue=Queue.BACKGROUND.value)
640
641
  def process_import_sources_as_task(import_source_ids: list[int]):
641
642
  """
642
643
  Call the `import_source` as a celery task
@@ -936,7 +937,7 @@ class ImportSource(ImportExportSource):
936
937
  return "wbcore:io:importsourcerepresentation-list"
937
938
 
938
939
 
939
- @shared_task(queue="importexport")
940
+ @shared_task(queue=Queue.BACKGROUND.value)
940
941
  def import_data_as_task(import_source_id: int, **kwargs):
941
942
  """
942
943
  Call `import_data` as a celery task
@@ -946,7 +947,7 @@ def import_data_as_task(import_source_id: int, **kwargs):
946
947
  import_source.import_data(**kwargs)
947
948
 
948
949
 
949
- @shared_task(queue="importexport")
950
+ @shared_task(queue=Queue.DEFAULT.value)
950
951
  def export_data_as_task(export_source_id: int, **kwargs):
951
952
  """
952
953
  Call `import_data` as a celery task
@@ -5,8 +5,10 @@ from django.db import connection
5
5
  from django.utils import timezone
6
6
  from dynamic_preferences.registries import global_preferences_registry
7
7
 
8
+ from wbcore.workers import Queue
8
9
 
9
- @shared_task()
10
+
11
+ @shared_task(queue=Queue.BACKGROUND.value)
10
12
  def clean_up_import_source(today: date | None = None):
11
13
  if not today:
12
14
  today = timezone.now()
@@ -12,6 +12,7 @@ from rest_framework.reverse import reverse
12
12
 
13
13
  from wbcore.shares.signals import handle_widget_sharing
14
14
 
15
+ from ...workers import Queue
15
16
  from .models import Notification, NotificationType, NotificationTypeSetting
16
17
  from .tasks import send_notification_task
17
18
 
@@ -64,7 +65,7 @@ def send_notification(
64
65
  )
65
66
 
66
67
 
67
- @shared_task()
68
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
68
69
  def send_notification_as_task(code, title, body, user_id, **kwargs):
69
70
  if not isinstance(user_id, list):
70
71
  user_id = [user_id]
@@ -9,6 +9,7 @@ from wbcore.contrib.notifications.models.notification_types import (
9
9
  NotificationTypeSetting,
10
10
  )
11
11
  from wbcore.contrib.notifications.models.notifications import Notification
12
+ from wbcore.workers import Queue
12
13
 
13
14
 
14
15
  def send_notification_email(notification: Notification):
@@ -35,7 +36,7 @@ def send_notification_email(notification: Notification):
35
36
  msg.send()
36
37
 
37
38
 
38
- @shared_task
39
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
39
40
  def send_notification_task(notification_pk: int):
40
41
  """A celery task to send out a notification via email, web or mobile
41
42
 
@@ -43,6 +43,14 @@ class CharField(_BaseField):
43
43
  return super().to_representation(value).astype("string", errors="ignore")
44
44
 
45
45
 
46
+ @dataclass
47
+ class DateTimeField(_BaseField):
48
+ type: str = "datetime"
49
+
50
+ def to_representation(self, value: pd.Series) -> pd.Series:
51
+ return pd.to_datetime(super().to_representation(value)).dt.strftime("%Y-%m-%d %H:%M:%S")
52
+
53
+
46
54
  @dataclass
47
55
  class DateField(_BaseField):
48
56
  type: str = "date"
@@ -22,6 +22,7 @@ from wbcore.contrib.workflow.utils import get_model_serializer_class_for_instanc
22
22
  from wbcore.models import WBModel
23
23
  from wbcore.utils.html import convert_html2text
24
24
  from wbcore.utils.string_loader import StringSourceLoader
25
+ from wbcore.workers import Queue
25
26
 
26
27
 
27
28
  class Step(WBModel):
@@ -661,7 +662,7 @@ class FinishStep(Step):
661
662
  verbose_name_plural = _("Finish Steps")
662
663
 
663
664
 
664
- @shared_task()
665
+ @shared_task(queue=Queue.DEFAULT.value)
665
666
  def activate_step(step_id: int, process_id: UUID):
666
667
  step = Step.objects.get(pk=step_id).get_casted_step()
667
668
  process = Process.objects.get(pk=process_id)
@@ -739,7 +740,7 @@ def _check_previous_steps_failed(step: Step, process: Process, check_all: bool =
739
740
  _check_previous_steps_failed(step, process)
740
741
 
741
742
 
742
- @shared_task()
743
+ @shared_task(queue=Queue.DEFAULT.value)
743
744
  def process_can_finish(process_id: UUID):
744
745
  """Checks if all critical steps for a process can still be reached. Fails the process if this is not the case.
745
746
 
wbcore/models/base.py CHANGED
@@ -12,6 +12,7 @@ from igraph import Graph
12
12
 
13
13
  from wbcore.signals.models import get_dependant_dynamic_fields_instances
14
14
 
15
+ from ..workers import Queue
15
16
  from .fields import DynamicDecimalField, DynamicFloatField
16
17
 
17
18
 
@@ -136,7 +137,7 @@ class DynamicModel(models.Model, metaclass=DynamicMetaClass):
136
137
  abstract = True
137
138
 
138
139
 
139
- @shared_task
140
+ @shared_task(queue=Queue.DEFAULT.value)
140
141
  def set_dynamic_field_as_task(content_type_id, object_id, **kwargs):
141
142
  content_type = ContentType.objects.get(id=content_type_id)
142
143
  instance = content_type.model_class().objects.get(id=object_id)
@@ -173,7 +174,7 @@ class WBModel(models.Model):
173
174
  return errors
174
175
 
175
176
 
176
- @shared_task
177
+ @shared_task(queue=Queue.DEFAULT.value)
177
178
  def merge_as_task(content_type_id: int, main_object_id: int, merged_object_id: int):
178
179
  content_type = ContentType.objects.get(id=content_type_id)
179
180
  with suppress(content_type.model_class().DoesNotExist):
wbcore/pandas/__init__.py CHANGED
@@ -12,6 +12,7 @@ from wbcore.contrib.pandas.fields import ( # noqa
12
12
  PKField,
13
13
  CharField,
14
14
  DateField,
15
+ DateTimeField,
15
16
  DateRangeField,
16
17
  BooleanField,
17
18
  TextField,
wbcore/pandas/fields.py CHANGED
@@ -10,6 +10,7 @@ from wbcore.contrib.pandas.fields import ( # noqa
10
10
  PKField,
11
11
  CharField,
12
12
  DateField,
13
+ DateTimeField,
13
14
  DateRangeField,
14
15
  BooleanField,
15
16
  TextField,
wbcore/tasks.py CHANGED
@@ -11,9 +11,10 @@ from wbcore.cache.registry import periodic_cache_registry
11
11
  from wbcore.models import DynamicModel
12
12
  from wbcore.utils.itertools import get_inheriting_subclasses
13
13
  from wbcore.utils.models import ComplexToStringMixin, DeleteToDisableMixin
14
+ from wbcore.workers import Queue
14
15
 
15
16
 
16
- @shared_task
17
+ @shared_task(queue=Queue.EXTENDED_BACKGROUND.value)
17
18
  def recompute_latest_modified_dynamic_fields(from_datetime=None, to_datetime=None, timedelta_days=1):
18
19
  """
19
20
  Daily (expected frequency) recompute of all dynamic model objects that falls within the specified time frame (default to the last 24h).
@@ -39,7 +40,7 @@ def recompute_latest_modified_dynamic_fields(from_datetime=None, to_datetime=Non
39
40
  DynamicModel.update_dynamic_fields_of_dependant_objects(already_updated_object)
40
41
 
41
42
 
42
- @shared_task
43
+ @shared_task(queue=Queue.EXTENDED_BACKGROUND.value)
43
44
  def recompute_computed_str(debug: bool = False):
44
45
  """
45
46
  When this task is executed, it will loop over all objects that inherit from ComplexToStringMixin and compare their current computed_str value with the expected one.
@@ -66,7 +67,7 @@ def recompute_computed_str(debug: bool = False):
66
67
  subclass.objects.bulk_update(objs, ["computed_str"])
67
68
 
68
69
 
69
- @shared_task
70
+ @shared_task(queue=Queue.EXTENDED_BACKGROUND.value)
70
71
  def clean_deleted_objects():
71
72
  """
72
73
  Periodically arise deleted objects that have passed the retention period from the database.
@@ -80,7 +81,7 @@ def clean_deleted_objects():
80
81
  ).delete()
81
82
 
82
83
 
83
- @shared_task
84
+ @shared_task(queue=Queue.EXTENDED_BACKGROUND.value)
84
85
  def refetch_pandas_api_view():
85
86
  for cache_api_view in periodic_cache_registry.classes:
86
87
  cache_api_view.fetch_cache()
wbcore/workers.py ADDED
@@ -0,0 +1,8 @@
1
+ import enum
2
+
3
+
4
+ class Queue(enum.Enum):
5
+ HIGH_PRIORITY = "high_priority" # High priority (for urgent, short tasks)
6
+ DEFAULT = "default" # for normal tasks
7
+ BACKGROUND = "background" # Less urgent, medium - length tasks (few minutes)
8
+ EXTENDED_BACKGROUND = "extended_background" # Very long-lasting background tasks (tasks lasting hours)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbcore
3
- Version: 1.59.4
3
+ Version: 1.59.5
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  Requires-Dist: boto3==1.35.*
6
6
  Requires-Dist: celery[redis]==5.*
@@ -10,9 +10,10 @@ wbcore/frontend_user_configuration.py,sha256=P4SQk9ALZLBs6gNTqGBkEB6Sr-w4RWDdcLU
10
10
  wbcore/messages.py,sha256=fSfELjXkastcd3gFiWGJrGI_dl0BzsKg8UfaApXf5nM,1967
11
11
  wbcore/pagination.py,sha256=lOW1BzJwlATzfOHo4BJA23avrg_39-LCL6mHctsAoBk,2282
12
12
  wbcore/routers.py,sha256=gLbQc8MRHuJax88FBDejtt3_MavE9KkwZMsQvAqJj0I,2174
13
- wbcore/tasks.py,sha256=AWwWhGro1_YJYcYWzJNSGTFHvBCzjHAB2iwGJGr-JB0,3913
13
+ wbcore/tasks.py,sha256=PXjAuJ3vQ8ESwucaLi0rfSAQneB5d3b5AODD0XC0naE,4102
14
14
  wbcore/urls.py,sha256=mP7uSW_hmCEODYxbSrsh3uDYoYwmBRAI4Vq0XWXkfeo,4827
15
15
  wbcore/views.py,sha256=6vfq4DfKmCJD27T_XvKdigMBy9NbpzcaBO3gYcq60tI,950
16
+ wbcore/workers.py,sha256=26PB4nhSay9LJ3DAj_G3gWZKX3ctu9WT4Ll0lC38L3k,351
16
17
  wbcore/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
18
  wbcore/cache/buttons.py,sha256=gyEizLHyWeWAiNxZ4fQ16pxiCy1sxfwIht928HBrOf8,970
18
19
  wbcore/cache/decorators.py,sha256=pfXnncxysUuKHFDoMX-oiPQ_eZfmi3i4qSrb0HDg3bA,1120
@@ -80,7 +81,7 @@ wbcore/contrib/agenda/migrations/0008_alter_calendaritem_item_type.py,sha256=zEw
80
81
  wbcore/contrib/agenda/migrations/0009_alter_calendaritem_icon.py,sha256=ZG8U5f6ghM9NKAuIgM1XmTZlHrSiHVi1YJirqFhppAQ,491
81
82
  wbcore/contrib/agenda/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
83
  wbcore/contrib/agenda/models/__init__.py,sha256=IfSBX-jDEegu6HvZ6a2EvFkUV6tYu1v29FxlxXbpTHE,94
83
- wbcore/contrib/agenda/models/calendar_item.py,sha256=tqb-dVbEzn43UjaRkYE27l4TiNzhYvng2eTHG8iFG3U,8274
84
+ wbcore/contrib/agenda/models/calendar_item.py,sha256=oq5w5ee9d5W1u1OqWy8Y724TSAzyFzZctJGYKWByZvk,8340
84
85
  wbcore/contrib/agenda/models/conference_room.py,sha256=24Q9ylP0hev1UgiiqCn46YAodjcP6BtWmXbTeYjFoJs,2795
85
86
  wbcore/contrib/agenda/release_notes/1_0_0.md,sha256=R4dJ7bqiHOQrKseVY0O7_untC6-1I9BBYy8qJYIdYLw,162
86
87
  wbcore/contrib/agenda/release_notes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -115,9 +116,9 @@ wbcore/contrib/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
115
116
  wbcore/contrib/ai/apps.py,sha256=nx-0Jd-jUjko4h1tBC1FXwuJI3KK9rdOkI7TNYKzWU8,97
116
117
  wbcore/contrib/ai/exceptions.py,sha256=NEJ7syViGXoPM9ZQ8hBfGH0Q75e52hq3foKAnHXvLOQ,1075
117
118
  wbcore/contrib/ai/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- wbcore/contrib/ai/llm/config.py,sha256=8pvKK4UjArM2Bl_TfWYiNUNa2AR-zjAckUvIGLrC1eU,5525
119
+ wbcore/contrib/ai/llm/config.py,sha256=WYCSX73KUwqmRBzrFa0cSkAA06MMrBpzGBV1Y2Nzox4,5576
119
120
  wbcore/contrib/ai/llm/decorators.py,sha256=u3AWbQjbCCeIp-X1aezhqeZJd8chbI1OhGnm8mDy5cY,198
120
- wbcore/contrib/ai/llm/mixins.py,sha256=4WBjHixLT05-_ZgWz_SHx7le4t2sqBalb-AkILkQnLE,986
121
+ wbcore/contrib/ai/llm/mixins.py,sha256=qbuRLaRCmLjdMC7r877RKYsMpE6AurYEGEzSPYYE9y4,1037
121
122
  wbcore/contrib/ai/llm/utils.py,sha256=B6iNt54x9ehN084wj-UvLUVEYrTPANSaITtl0AT3WJc,2503
122
123
  wbcore/contrib/authentication/__init__.py,sha256=eQ3KJSYPoO4xc867RdcdayxaxZ8TLGLHMA3kY5H6UMg,313
123
124
  wbcore/contrib/authentication/admin.py,sha256=vWYNMx9woqROm_dOwraYqLKunUv0d46SOrY5J9pcqsI,9052
@@ -127,7 +128,7 @@ wbcore/contrib/authentication/configs.py,sha256=Z3M2X6xzWhwJEEvHym6d9khriSdgyTmi
127
128
  wbcore/contrib/authentication/configurations.py,sha256=N-631Y0kfJzacLcs926uom7SaoJC7RvhA7nsR5NV_hs,2362
128
129
  wbcore/contrib/authentication/dynamic_preferences_registry.py,sha256=oWCqvR-lzduzOrwh5DlsTBfP-9NyjCERNpKLjfnkNzo,982
129
130
  wbcore/contrib/authentication/filters.py,sha256=UEIbxpFhjc2G8DFq0r0hWEoAASoNZDmBI3PZvPD8-Q8,424
130
- wbcore/contrib/authentication/tasks.py,sha256=5h2dL3nbrfpkU6i6Qq51vk7PMh14_-YLlfvyskGOVO0,1201
131
+ wbcore/contrib/authentication/tasks.py,sha256=shKDGGyKN6_Ubqvl5I5mW9NZ1cBFO-yIiyvKpDIb778,1260
131
132
  wbcore/contrib/authentication/urls.py,sha256=OUeLXEwuF6yS-oXeBpkC5aCviEC-nPbM3CSOcNpEImE,3974
132
133
  wbcore/contrib/authentication/utils.py,sha256=jmOZtY_z6oW_r6npGPH00IbPcUjWZ1NchodMgcHXEbs,341
133
134
  wbcore/contrib/authentication/factories/__init__.py,sha256=hpYaVz57Ko4lh6rZex31HuO-pyJ-LmegzGH26hSrIqo,243
@@ -150,7 +151,7 @@ wbcore/contrib/authentication/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5
150
151
  wbcore/contrib/authentication/models/__init__.py,sha256=GhtPxWgZEUcbFQt2ArdB6OPjyEYav3F_XddlKnht0_w,125
151
152
  wbcore/contrib/authentication/models/tokens.py,sha256=QGNz4Tejy6KqxOnrIGIGC4PPbKsP-CbGQ3AXNsN-zW4,5415
152
153
  wbcore/contrib/authentication/models/users.py,sha256=ShQjVpEKHCgwH1IajrYXMlDef13xinf2WqfV68aQf-A,7826
153
- wbcore/contrib/authentication/models/users_activities.py,sha256=Jg1o3CGM4j7nOmk3O025Odn6sf6pZjZiivCcR3UEAWs,4224
154
+ wbcore/contrib/authentication/models/users_activities.py,sha256=uyr1FLNNCC9YDBN7hKnVGDjc9DmonY-BjPqtrUUA8o8,4289
154
155
  wbcore/contrib/authentication/release_notes/1_0_0.md,sha256=pZ6rgeR5mTB3vabX3eaEJXMSfs7m4a1SEbYdpAmXwyI,170
155
156
  wbcore/contrib/authentication/release_notes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
157
  wbcore/contrib/authentication/serializers/__init__.py,sha256=pY77syWz4VtH1RlGMv5-0nlnneDshvNDmk-N52lBXIc,455
@@ -415,7 +416,7 @@ wbcore/contrib/documents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
415
416
  wbcore/contrib/documents/models/__init__.py,sha256=25wDRkkATAkLYxfbwuVbua1sN3YrBW76cPqSXNGFzi0,205
416
417
  wbcore/contrib/documents/models/document_model_relationships.py,sha256=20p_Dqxs1xSoyzF-3DqlzoO70nMcufYGHJNySc_tCrc,2195
417
418
  wbcore/contrib/documents/models/document_types.py,sha256=bgIUVepm9CPAvCmOggh63ZfyyGdNp3FKZPEqEAuxuuA,1213
418
- wbcore/contrib/documents/models/documents.py,sha256=HXsr3-sEqwF1j6MDiANUzBzJZNzhhrRwhhDVrCWiNpc,11257
419
+ wbcore/contrib/documents/models/documents.py,sha256=-Qr9Lj95ZD27dJThiIkl1Yu_bvuPTTdNFIah6Amc4bE,11323
419
420
  wbcore/contrib/documents/models/mixins.py,sha256=6b_FO8ZTQ779f28O33auYdrIXDmnnMOIKvfQOkivjl8,230
420
421
  wbcore/contrib/documents/models/shareable_links.py,sha256=YFvKbAQ8VNu92c74edfw5zwnofjTDcPum_E43XpWVSE,2841
421
422
  wbcore/contrib/documents/release_notes/1_0_0.md,sha256=MIX-LM8Rr4odLJACp0SBNVn1OwQzdkTmPyDgMV1ImH4,164
@@ -463,7 +464,7 @@ wbcore/contrib/dynamic_preferences/viewsets.py,sha256=bM6_L1sAUzg6BQ--BkU4-OT6wq
463
464
  wbcore/contrib/example_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
464
465
  wbcore/contrib/example_app/admin.py,sha256=Eo9dnGvXdUEgfpzi2qmovfzJExFYd_ZgGVV2oOdsqKI,2686
465
466
  wbcore/contrib/example_app/apps.py,sha256=h5pkRPxGGVlXFq95eGayfPL9XJAwFHGrsigYxFXLWN4,168
466
- wbcore/contrib/example_app/models.py,sha256=P1AyQnSD3Ze1WI4jHWCid6AVZJX6SW3hZ79Gs7NwP84,32681
467
+ wbcore/contrib/example_app/models.py,sha256=kuSq3TgsUUrQumsgnVfEx6KCVsGMgEKP2_4h76UdF20,32741
467
468
  wbcore/contrib/example_app/urls.py,sha256=KbHORgxYJc-w7415BSDf52eSsfjuvZV-0VKLLzRz90o,4813
468
469
  wbcore/contrib/example_app/utils.py,sha256=zHEwC7IzIHpZoqFNVnuA75w0IIKKMR9xMpIYkNWKi5A,697
469
470
  wbcore/contrib/example_app/views.py,sha256=1e8iMtBxclH9Vbi_z73pHgeb_kI3Gmaiq3KI6JmJKqI,287
@@ -622,13 +623,13 @@ wbcore/contrib/gleap/tests/tests.py,sha256=jtPqW_ATh8OFIEb4R8RMMrhAbcNrB0FamOj1L
622
623
  wbcore/contrib/guardian/apps.py,sha256=dHE4YM4uk92w5Xsmk_P1agutR_1jQytTq9dRDaj-BAU,139
623
624
  wbcore/contrib/guardian/configurations.py,sha256=rzSTs_4zbADDSnmqgqRHYd83gKdPAGyrHdegQtnH-qQ,168
624
625
  wbcore/contrib/guardian/filters.py,sha256=36dXy8IaSyPDKc7QkAip4d_12U1luCOKH3ujXgjBHqg,752
625
- wbcore/contrib/guardian/tasks.py,sha256=DrHBQCkjgBIof2XbR4rwm9zH4b2LwCduKUXL_wNm8pg,516
626
+ wbcore/contrib/guardian/tasks.py,sha256=hCUKRkcASTnSjLIQTOgU5C6pNDCL2soyij-JzTjLU08,588
626
627
  wbcore/contrib/guardian/urls.py,sha256=UCUiYxALnbEH7ZNKs4jp_xBx6vHClsVi9Hd_NR1_0Wg,412
627
628
  wbcore/contrib/guardian/utils.py,sha256=7gIVVkVjS6c7enomR3L3VfbN_CcbDD4VL2kWgNb39I8,5205
628
629
  wbcore/contrib/guardian/migrations/0001_initial.py,sha256=IB4_ls922OVdC3r_9FhIFR_xom0wic2NOwYG9gRo8S8,4609
629
630
  wbcore/contrib/guardian/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
630
631
  wbcore/contrib/guardian/models/__init__.py,sha256=63_HSsJbwNgPPt67vyZKHm5dqB8X-YIAF6tRlK9YgQk,64
631
- wbcore/contrib/guardian/models/mixins.py,sha256=n9CYPaYFqOZXawv0YJEZv9b-IsVqOvHRiDdkRN2SFGg,5618
632
+ wbcore/contrib/guardian/models/mixins.py,sha256=lzSz8AKn_TnJvzzEMTTLY6xyoerD8jujZXgAm4DFRts,5705
632
633
  wbcore/contrib/guardian/models/models.py,sha256=KlvruzHS6ogviEm_fklGKO6dzqZCpnE7cKNJxDmfy4Y,1121
633
634
  wbcore/contrib/guardian/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
634
635
  wbcore/contrib/guardian/tests/conftest.py,sha256=5HFVx8rTnexM2qlPyzDTmhngVZrKVO7ibSqm5i2KoFg,67
@@ -646,7 +647,7 @@ wbcore/contrib/guardian/viewsets/configs/endpoints.py,sha256=qsLsDPmR5sopKuDwnmh
646
647
  wbcore/contrib/guardian/viewsets/configs/titles.py,sha256=ASsOasxjqfMLGqguu8QDyYUwc4yvvKYZYQNU5gbH9kM,518
647
648
  wbcore/contrib/i18n/__init__.py,sha256=StXJ-OqqI2M8rCbisUDrvRcYHHEG2J91Mja1Io8HgFo,96
648
649
  wbcore/contrib/i18n/buttons.py,sha256=2sEPAUvjJTr5z7ts71Ai8d_9Oxyt8wjY-Z1XgCsoOsk,1490
649
- wbcore/contrib/i18n/translation.py,sha256=IVj0xK1mJGeBBHlDaTpYZmBIbF3Kfmwddtf62ZsUI5I,4911
650
+ wbcore/contrib/i18n/translation.py,sha256=_LzWKzu-OxtGrzIXIqLIVIGwkXG0TAe4Mgjrcr-MXP8,4971
650
651
  wbcore/contrib/i18n/viewsets.py,sha256=8bNkDBGBBUziDebHIPCFLs1TNLsj5xeYFPdDRtiB0Ns,1671
651
652
  wbcore/contrib/i18n/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
652
653
  wbcore/contrib/i18n/serializers/fields.py,sha256=HhEN-I5fcMslMrZdiCQdYWyGfRGgOXQqzE9BR7b4pJM,760
@@ -670,11 +671,11 @@ wbcore/contrib/io/exceptions.py,sha256=-9pTtBr4oj7qBpKwnsN7sabu5S6gpDkWTXkA4ZaW9
670
671
  wbcore/contrib/io/factories.py,sha256=U5ppoOMM4yd6pla_bscWo9v7ug5W_bWV29ZL4PKLZsU,7053
671
672
  wbcore/contrib/io/imports.py,sha256=Hu8ppai06SQ_CDQ2oUbFcwduAhekCp1l1DB89kTn2nQ,13087
672
673
  wbcore/contrib/io/mixins.py,sha256=Sy_1mfdJzrIODCRcbfiA6miU8EqKEaJhL7mEjsRhOvY,1297
673
- wbcore/contrib/io/models.py,sha256=N5umz_bf5PtmrBYhJF5qTGLK-NPx-WbA-tkSVMF1bi0,40469
674
+ wbcore/contrib/io/models.py,sha256=cT9oGt5tnuMDW7wTVWRhZQoTmC3cYlq6jP734szY-dQ,40535
674
675
  wbcore/contrib/io/resources.py,sha256=eGEpmyrtkB3DgFKV6m57OFzyu6jBZUIXkn5Jopeus9M,6953
675
676
  wbcore/contrib/io/serializers.py,sha256=oS5od8ni8wUZml1zM_RAdW9VWrw226Ru4v3RBifOnFY,4639
676
677
  wbcore/contrib/io/signals.py,sha256=jCGHjt5Qg2T1aIi4BzWYzWYb2YZT82gUMhG68v2rx58,145
677
- wbcore/contrib/io/tasks.py,sha256=nuNSD3VqK6KwsSHGf2pQc26YaJx40zv5hroKvzyGJeg,797
678
+ wbcore/contrib/io/tasks.py,sha256=auozEPYqu_R7pjwr_1QSS5csGAYIEEWIVqNjSLzZhkw,859
678
679
  wbcore/contrib/io/urls.py,sha256=v91WUMYKwQhI9mDnpScP6hvYdGSdQZg0yQzEljCZ4lk,1014
679
680
  wbcore/contrib/io/utils.py,sha256=SMjQeUEg_cuBKQfnKGj-qjJDC8Z_xCOQ-t7VZxwCZt4,1359
680
681
  wbcore/contrib/io/viewset_mixins.py,sha256=RhO8TE9RPQsubSd2H2XgIJLD92tHu-7_gO8JwROxtHI,11419
@@ -723,8 +724,8 @@ wbcore/contrib/notifications/admin.py,sha256=aeLRLXw-5-fRXrrRAyFBtoFo8rzu8XSozM1
723
724
  wbcore/contrib/notifications/apps.py,sha256=O5rwHeCn3FBTE1rjJgNDahJcGXQqezvIEX7T1RtBsZ8,1883
724
725
  wbcore/contrib/notifications/configs.py,sha256=Brt_79I8teg-sLzy6KBVsb0eXg-KFmgv_t-bNdznX5k,538
725
726
  wbcore/contrib/notifications/configurations.py,sha256=ZoNd8cdbw8Y-rQIQtS2VgieUO8FQ-kdgZdzNMwqL484,327
726
- wbcore/contrib/notifications/dispatch.py,sha256=64LrSiZXk545QJ_PpOKqEQZO4Jep5-MRcPgtU_w5qaQ,3260
727
- wbcore/contrib/notifications/tasks.py,sha256=ayNcO2WoPDdc9ktfPxdod7Odja5xhn1o7eVUyrSm1zE,2051
727
+ wbcore/contrib/notifications/dispatch.py,sha256=KgTMe6nZGENoYmeXn_3ay0tl2sDPi9IdSOxVVLrbKKM,3320
728
+ wbcore/contrib/notifications/tasks.py,sha256=rdOFPLPiRKEuP9YqAdhnQD-93GvR4C0JykwCD9ziF7w,2117
728
729
  wbcore/contrib/notifications/urls.py,sha256=C764DdlQcJaPjzRKqKrLxKMhpZITZe-YLZaAQOFtzys,872
729
730
  wbcore/contrib/notifications/utils.py,sha256=Ou8JwrsDfJ_OHaz4qJuNrR5nhgKXAatRyFyWwAYrCaY,929
730
731
  wbcore/contrib/notifications/views.py,sha256=kr7UNwSdQpiwc0-N2KB6zsqNXcodsAcu2wpPblHZoO0,2601
@@ -787,7 +788,7 @@ wbcore/contrib/notifications/viewsets/notifications.py,sha256=0Y5VJZgu8rwOnYNWDT
787
788
  wbcore/contrib/notifications/viewsets/configs/notification_types.py,sha256=8x0xmT6brlXh5fiI689fMhtKMjynETD0Xlm1QVYUlD8,1893
788
789
  wbcore/contrib/notifications/viewsets/configs/notifications.py,sha256=KHy4V5R3D8AjZp1No7EasjeR-zPzks8eO-2PjlIxMuo,3605
789
790
  wbcore/contrib/pandas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
790
- wbcore/contrib/pandas/fields.py,sha256=PnLYBnWP6fd3yDFPqcWlH0qrS16dv4Pg9ZRF4p1Ag5Q,4058
791
+ wbcore/contrib/pandas/fields.py,sha256=JtDxAolmiMYj_-HJqLVX5G7iN2jDm-oh4nbGeteydeY,4293
791
792
  wbcore/contrib/pandas/filters.py,sha256=Pi5h3JB9Ugqx-xZ82X8MUIfRHwrY5locBUQH7GDg60w,4821
792
793
  wbcore/contrib/pandas/filterset.py,sha256=uoeW54GT-rhgtUedJzq2QjKfpwRdmNFW7C059fm30lg,1036
793
794
  wbcore/contrib/pandas/metadata.py,sha256=EIKp94TDtdtCRELl3zWTLU37FzNX-EpVeMgISUgI-FY,772
@@ -869,7 +870,7 @@ wbcore/contrib/workflow/models/condition.py,sha256=Dwxz4t7qq3E1_PyT5e4r23bd6CbXk
869
870
  wbcore/contrib/workflow/models/data.py,sha256=rmnZXjyj6merFmZLpneCwNzFczCelFQxF2YqD-sQT9Y,8501
870
871
  wbcore/contrib/workflow/models/display.py,sha256=A09tKwOTwa5FUFhj7HEILI0q6X4eHvNDproXceusqe8,923
871
872
  wbcore/contrib/workflow/models/process.py,sha256=DMm_NG9g68UomwjbOYCzNPh6PIF80GrDbG5oDdqfk_Y,8541
872
- wbcore/contrib/workflow/models/step.py,sha256=AfbfH4-V3nT_el4qEjdbUDfa6O2t6J0nvF_QOCBu6Lg,29022
873
+ wbcore/contrib/workflow/models/step.py,sha256=MxY7e6pBOSfU51yIKfdCjP436vVsWm0v0z35gVfaLCk,29105
873
874
  wbcore/contrib/workflow/models/transition.py,sha256=b-1rZTA8rZmxRhAR7RDqkUT7W8DIwjlsKmscvYfmpIs,2344
874
875
  wbcore/contrib/workflow/models/workflow.py,sha256=YqoSBtrpRPsRGDNxIhtbChT4yB27V42WKseOy9uroBQ,11690
875
876
  wbcore/contrib/workflow/serializers/__init__.py,sha256=b7rERecOTkKCFPlR2ONncXkwvozHWsQYrx5SFkJ0ntU,1313
@@ -1057,11 +1058,11 @@ wbcore/migrations/0013_delete_colorgradient.py,sha256=2dSI5TE6QgxZagPM_Tj2_VebVE
1057
1058
  wbcore/migrations/0014_biguserobjectpermission_system.py,sha256=gp94sckRkv59IP908kf6RCgB-1nhep86OThER9wHOK8,1390
1058
1059
  wbcore/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1059
1060
  wbcore/models/__init__.py,sha256=Ukm6r1FTiPMwcXOmiTmW73aktzFmQicN7Cm7XISD8fg,309
1060
- wbcore/models/base.py,sha256=TG721oLpsG1NVliyseCeFmCfYm_PGv_VlbdtYHS2AEM,7123
1061
+ wbcore/models/base.py,sha256=VKsnRJReu8SInvpMLV7_3SImVE9StY5H0Fj_stckyz8,7205
1061
1062
  wbcore/models/fields.py,sha256=IsHaIzQ2GU_rC7AORdSF9IIc_XkXPkEK5rV0wnijRmU,984
1062
1063
  wbcore/models/orderable.py,sha256=3uxEHuixP-qeCp_s86JzYC-ENAqh1NIlNOilht1h9bM,171
1063
- wbcore/pandas/__init__.py,sha256=2R8QJYuou5Ccm5lf5Ct-A7q25bb5DdUaVk_NypwgwGs,1399
1064
- wbcore/pandas/fields.py,sha256=b14B1eM0XpIL_PB1NIT7ffHP-PvhgE7whdph9AeyHzI,504
1064
+ wbcore/pandas/__init__.py,sha256=nYHncIbSqUu8nV6_5dzVQomTFYrxPhS_Hivfh6yYcl0,1418
1065
+ wbcore/pandas/fields.py,sha256=_F-gATQs-MJewMVrK5ObNot3c8WYVX-HNn59Zeo8TwM,523
1065
1066
  wbcore/pandas/filterset.py,sha256=eWqp1tnR_FNORtdbquFa7XlvjXHozzSU3tBLEA2RlYY,289
1066
1067
  wbcore/pandas/utils.py,sha256=1MW00r9k0USDXeoUAdrWXtv691WP5y0Ymc6gn4Z6CR4,662
1067
1068
  wbcore/pandas/views.py,sha256=3R8WqcUc2RYF8FQPUw-L_tHId4Di7tvna012PjUxWlI,309
@@ -1219,7 +1220,6 @@ wbcore/utils/settings.py,sha256=MCt48ZJO9nOzGPAFYJ-_o0uRCDUt3_yzEek6m4oZTYg,198
1219
1220
  wbcore/utils/signals.py,sha256=sNDbYKcjTsACpod50dB_TgYC-f37aN0N_M_DMJgTiMA,1132
1220
1221
  wbcore/utils/string_loader.py,sha256=AWmn40nM8A1cxoVwpO2lF6YidEfL3JC1du2cank4Dw4,1169
1221
1222
  wbcore/utils/strings.py,sha256=DvMm2vrEjfxH6Hjf7XvRSo-3eAnLf4oLzxki8xonmNs,1856
1222
- wbcore/utils/task.py,sha256=HlPyALx78lSprsY_ICeI-SrXTPBmRpx8nyVIIrRtKb4,84
1223
1223
  wbcore/utils/urls.py,sha256=BjmavE84QYECWDKyV3dENn8GQqwdBmX6MqXyCjmwmbA,2137
1224
1224
  wbcore/utils/views.py,sha256=XnWQqMjAi6dXTF-ZYF9FHU1a7cDpAymcuZRt8g_cEqI,8541
1225
1225
  wbcore/utils/date_builder/__init__.py,sha256=4rS8hqGqTTL7ztIJ-J-EMigGC_HTkHD65LT5FQ67yjo,337
@@ -1231,6 +1231,6 @@ wbcore/viewsets/generics.py,sha256=lKDq9UY_Tyc56u1bqaIEvHGgoaXwXxpZ1c3fLVteptI,1
1231
1231
  wbcore/viewsets/mixins.py,sha256=IdHd_uixOv3ExKoHxTgL5Bt8OELIwfYwhBZm0nsvZfc,12054
1232
1232
  wbcore/viewsets/utils.py,sha256=4520Ij3ASM8lOa8QZkCqbBfOexVRiZu688eW-PGqMOA,882
1233
1233
  wbcore/viewsets/viewsets.py,sha256=FPPESunEjlunDr5VFsjTfsquTS3iDSQkw0H6QjMKPqk,6574
1234
- wbcore-1.59.4.dist-info/METADATA,sha256=RS3Y7NMquMipvCLVmnoBmFptUkmBi6DCmE7z91pNl4c,2332
1235
- wbcore-1.59.4.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
1236
- wbcore-1.59.4.dist-info/RECORD,,
1234
+ wbcore-1.59.5.dist-info/METADATA,sha256=BWyOrTqsITe6VKpdkCd92iKrNjRj9ipPF1mZ6htWZ7Q,2332
1235
+ wbcore-1.59.5.dist-info/WHEEL,sha256=aha0VrrYvgDJ3Xxl3db_g_MDIW-ZexDdrc_m-Hk8YY4,105
1236
+ wbcore-1.59.5.dist-info/RECORD,,
wbcore/utils/task.py DELETED
@@ -1,6 +0,0 @@
1
- from celery import shared_task
2
-
3
-
4
- @shared_task
5
- def save_as_task(obj):
6
- obj.save()