mirror of
https://github.com/suitenumerique/meet.git
synced 2026-07-27 12:19:10 +00:00
dc278a6064
For the coming features we will need to store files on the meet side. (for instance user backgrounds). This commits adds a new Model to manage files, and the associated serializers & viewsets. All are tested. This work was heavily inspired by the work done by our friends at https://github.com/suitenumerique/drive It build on the same architecture design (upload directly to S3 but download goes through our proxy), but model is much much simplier (no folders, no file sharing, etc.).
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
# ruff: noqa: PLC0415
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
def task(*d_args, **d_kwargs):
|
|
"""
|
|
Decorator compatible with Celery's @app.task, but works without Celery.
|
|
|
|
If Celery is available, returns a real Celery task.
|
|
If not, returns the original function and provides `.delay()`/`.apply_async()`
|
|
as synchronous fallbacks (so existing call sites don't break).
|
|
|
|
Notes:
|
|
Mostly LLM-generated.
|
|
"""
|
|
|
|
def _fallback_wrap(func):
|
|
def delay(*args, **kwargs):
|
|
return func(*args, **kwargs)
|
|
|
|
def apply_async(args=None, kwargs=None, **_options):
|
|
return func(*(args or ()), **(kwargs or {}))
|
|
|
|
func.delay = delay
|
|
func.apply_async = apply_async
|
|
return func
|
|
|
|
# Handle bare decorator usage: @task
|
|
if len(d_args) == 1 and callable(d_args[0]) and not d_kwargs:
|
|
func = d_args[0]
|
|
if settings.CELERY_ENABLED:
|
|
from meet.celery_app import app as _celery_app
|
|
|
|
return _celery_app.task(func)
|
|
return _fallback_wrap(func)
|
|
|
|
# Handle parameterized usage: @task(...), e.g. @task(bind=True)
|
|
def _decorate(func):
|
|
if settings.CELERY_ENABLED:
|
|
from meet.celery_app import app as _celery_app
|
|
|
|
return _celery_app.task(*d_args, **d_kwargs)(func)
|
|
return _fallback_wrap(func)
|
|
|
|
return _decorate
|
|
|
|
|
|
__all__ = ("task",)
|