diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 06:42:51 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 06:42:51 +0000 |
| commit | 2218d490b63dfc3893d77f2d55826ff0503aaeeb (patch) | |
| tree | 8d14e4447d8a1418ed3dd11b2d95bb6307d2d56c | |
| parent | 3d8ae7b118ceaed0502ddd0c49ba6d649f9297da (diff) | |
automatic import of python-celery-progress
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-celery-progress.spec | 873 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 875 insertions, 0 deletions
@@ -0,0 +1 @@ +/celery-progress-0.3.tar.gz diff --git a/python-celery-progress.spec b/python-celery-progress.spec new file mode 100644 index 0000000..2ef4b97 --- /dev/null +++ b/python-celery-progress.spec @@ -0,0 +1,873 @@ +%global _empty_manifest_terminate_build 0 +Name: python-celery-progress +Version: 0.3 +Release: 1 +Summary: Drop in, configurable, dependency-free progress bars for your Django/Celery applications. +License: MIT License +URL: https://github.com/czue/celery-progress +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c6/3c/50a7f9a49822fdd02ff8fd7b5cfd5465ca907905af8145e3a433dc3f3d95/celery-progress-0.3.tar.gz +BuildArch: noarch + +Requires: python3-channels-rabbitmq +Requires: python3-channels-redis +Requires: python3-channels + +%description +# Celery Progress Bars for Django + +Drop in, dependency-free progress bars for your Django/Celery applications. + +Super simple setup. Lots of customization available. + +## Demo + +[Celery Progress Bar demo on Build With Django](https://buildwithdjango.com/projects/celery-progress/) + +### Github demo application: build a download progress bar for Django +Starting with Celery can be challenging, [eeintech](https://github.com/eeintech) built a complete [Django demo application](https://github.com/eeintech/django-celery-progress-demo) along with a [step-by-step guide](https://eeinte.ch/stream/progress-bar-django-using-celery/) to get you started on building your own progress bar! + +## Installation + +If you haven't already, make sure you have properly [set up celery in your project](https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#first-steps). + +Then install this library: + +```bash +pip install celery-progress +``` + +## Usage + +### Prerequisites + +First add `celery_progress` to your `INSTALLED_APPS` in `settings.py`. + +Then add the following url config to your main `urls.py`: + +```python +from django.urls import path, include + +urlpatterns = [ + # your project's patterns here + ... + path(r'^celery-progress/', include('celery_progress.urls')), # add this line (the endpoint is configurable) +] +``` + +### Recording Progress + +In your task you should add something like this: + +```python +from celery import shared_task +from celery_progress.backend import ProgressRecorder +import time + +@shared_task(bind=True) +def my_task(self, seconds): + progress_recorder = ProgressRecorder(self) + result = 0 + for i in range(seconds): + time.sleep(1) + result += i + progress_recorder.set_progress(i + 1, seconds) + return result +``` + +You can add an optional progress description like this: + +```python + progress_recorder.set_progress(i + 1, seconds, description='my progress description') +``` + +### Displaying progress + +In the view where you call the task you need to get the task ID like so: + +**views.py** +```python +def progress_view(request): + result = my_task.delay(10) + return render(request, 'display_progress.html', context={'task_id': result.task_id}) +``` + +Then in the page you want to show the progress bar you just do the following. + +#### Add the following HTML wherever you want your progress bar to appear: + +**display_progress.html** +```html +<div class='progress-wrapper'> + <div id='progress-bar' class='progress-bar' style="background-color: #68a9ef; width: 0%;"> </div> +</div> +<div id="progress-bar-message">Waiting for progress to start...</div> +``` + +#### Import the javascript file. + +**display_progress.html** +```html +<script src="{% static 'celery_progress/celery_progress.js' %}"></script> +``` + +#### Initialize the progress bar: + +```javascript +// vanilla JS version +document.addEventListener("DOMContentLoaded", function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl); +}); +``` + +or + +```javascript +// JQuery +$(function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl) +}); +``` + +### Displaying the result of a task + +If you'd like you can also display the result of your task on the front end. + +To do that follow the steps below. Result handling can also be customized. + +#### Initialize the result block: + +This is all that's needed to render the result on the page. + +**display_progress.html** +```html +<div id="celery-result"></div> +``` + +But more likely you will want to customize how the result looks, which can be done as below: + +```javascript +// JQuery +var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + +function customResult(resultElement, result) { + $( resultElement ).append( + $('<p>').text('Sum of all seconds is ' + result) + ); +} + +$(function () { + CeleryProgressBar.initProgressBar(progressUrl, { + onResult: customResult, + }) +}); +``` + +## Customization + +The `initProgressBar` function takes an optional object of options. The following options are supported: + +| Option | What it does | Default Value | +|--------|--------------|---------------| +| pollInterval | How frequently to poll for progress (in milliseconds) | 500 | +| progressBarId | Override the ID used for the progress bar | 'progress-bar' | +| progressBarMessageId | Override the ID used for the progress bar message | 'progress-bar-message' | +| progressBarElement | Override the *element* used for the progress bar. If specified, progressBarId will be ignored. | document.getElementById(progressBarId) | +| progressBarMessageElement | Override the *element* used for the progress bar message. If specified, progressBarMessageId will be ignored. | document.getElementById(progressBarMessageId) | +| resultElementId | Override the ID used for the result | 'celery-result' | +| resultElement | Override the *element* used for the result. If specified, resultElementId will be ignored. | document.getElementById(resultElementId) | +| onProgress | function to call when progress is updated | onProgressDefault | +| onSuccess | function to call when progress successfully completes | onSuccessDefault | +| onError | function to call on a known error with no specified handler | onErrorDefault | +| onRetry | function to call when a task attempts to retry | onRetryDefault | +| onIgnored | function to call when a task result is ignored | onIgnoredDefault | +| onTaskError | function to call when progress completes with an error | onError | +| onNetworkError | function to call on a network error (ignored by WebSocket) | onError | +| onHttpError | function to call on a non-200 response (ignored by WebSocket) | onError | +| onDataError | function to call on a response that's not JSON or has invalid schema due to a programming error | onError | +| onResult | function to call when returned non empty result | CeleryProgressBar.onResultDefault | +| barColors | dictionary containing color values for various progress bar states. Colors that are not specified will defer to defaults | barColorsDefault | +| defaultMessages | dictionary containing default messages that can be overridden | see below | + +The `barColors` option allows you to customize the color of each progress bar state by passing a dictionary of key-value pairs of `state: #hexcode`. The defaults are shown below. + +| State | Hex Code | Image Color | +|-------|----------|:-------------:| +| success | #76ce60 |  | +| error | #dc4f63 |  | +| progress | #68a9ef |  | +| ignored | #7a7a7a |  | + +The `defaultMessages` option allows you to override some default messages in the UI. At the moment these are: + +| Message Id | When Shown | Default Value | +|-------|----------|:-------------:| +| waiting | Task is waiting to start | 'Waiting for task to start...' +| started | Task has started but reports no progress | 'Task started...' + +# WebSocket Support + +Additionally, this library offers WebSocket support using [Django Channels](https://channels.readthedocs.io/en/latest/) +courtesy of [EJH2](https://github.com/EJH2/). + +A working example project leveraging WebSockets is [available here](https://github.com/EJH2/cp_ws-example). + +To use WebSockets, install with `pip install celery-progress[websockets,redis]` or +`pip install celery-progress[websockets,rabbitmq]` (depending on broker dependencies). + +See `WebSocketProgressRecorder` and `websockets.js` for details. + +# Securing the get_progress endpoint +By default, anyone can see the status and result of any task by accessing `/celery-progress/<task_id>` + +To limit access, you need to wrap `get_progress()` in a view of your own which implements the permissions check, and create a new url routing to point to your view. Make sure to remove any existing (unprotected) celery progress urls from your root urlconf at the same time. + + +For example, requiring login with a class-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import View + +class TaskStatus(LoginRequiredMixin, View): + def get(self, request, task_id, *args, **kwargs): + # Other checks could go here + return get_progress(request, task_id=task_id) +``` + +```python +# urls.py +from django.urls import path +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.TaskStatus.as_view(), name='task_status'), + ... +] +``` + +Requiring login with a function-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.decorators import login_required + +@login_required +def task_status(request, task_id): + # Other checks could go here + return get_progress(request, task_id) +``` + +```python +# urls.py +from django.urls import path + +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.task_status, name='task_status'), + ... +] +``` + + +Any links to `'celery_progress:task_status'` will need to be changed to point to your new endpoint. + + + +%package -n python3-celery-progress +Summary: Drop in, configurable, dependency-free progress bars for your Django/Celery applications. +Provides: python-celery-progress +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-celery-progress +# Celery Progress Bars for Django + +Drop in, dependency-free progress bars for your Django/Celery applications. + +Super simple setup. Lots of customization available. + +## Demo + +[Celery Progress Bar demo on Build With Django](https://buildwithdjango.com/projects/celery-progress/) + +### Github demo application: build a download progress bar for Django +Starting with Celery can be challenging, [eeintech](https://github.com/eeintech) built a complete [Django demo application](https://github.com/eeintech/django-celery-progress-demo) along with a [step-by-step guide](https://eeinte.ch/stream/progress-bar-django-using-celery/) to get you started on building your own progress bar! + +## Installation + +If you haven't already, make sure you have properly [set up celery in your project](https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#first-steps). + +Then install this library: + +```bash +pip install celery-progress +``` + +## Usage + +### Prerequisites + +First add `celery_progress` to your `INSTALLED_APPS` in `settings.py`. + +Then add the following url config to your main `urls.py`: + +```python +from django.urls import path, include + +urlpatterns = [ + # your project's patterns here + ... + path(r'^celery-progress/', include('celery_progress.urls')), # add this line (the endpoint is configurable) +] +``` + +### Recording Progress + +In your task you should add something like this: + +```python +from celery import shared_task +from celery_progress.backend import ProgressRecorder +import time + +@shared_task(bind=True) +def my_task(self, seconds): + progress_recorder = ProgressRecorder(self) + result = 0 + for i in range(seconds): + time.sleep(1) + result += i + progress_recorder.set_progress(i + 1, seconds) + return result +``` + +You can add an optional progress description like this: + +```python + progress_recorder.set_progress(i + 1, seconds, description='my progress description') +``` + +### Displaying progress + +In the view where you call the task you need to get the task ID like so: + +**views.py** +```python +def progress_view(request): + result = my_task.delay(10) + return render(request, 'display_progress.html', context={'task_id': result.task_id}) +``` + +Then in the page you want to show the progress bar you just do the following. + +#### Add the following HTML wherever you want your progress bar to appear: + +**display_progress.html** +```html +<div class='progress-wrapper'> + <div id='progress-bar' class='progress-bar' style="background-color: #68a9ef; width: 0%;"> </div> +</div> +<div id="progress-bar-message">Waiting for progress to start...</div> +``` + +#### Import the javascript file. + +**display_progress.html** +```html +<script src="{% static 'celery_progress/celery_progress.js' %}"></script> +``` + +#### Initialize the progress bar: + +```javascript +// vanilla JS version +document.addEventListener("DOMContentLoaded", function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl); +}); +``` + +or + +```javascript +// JQuery +$(function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl) +}); +``` + +### Displaying the result of a task + +If you'd like you can also display the result of your task on the front end. + +To do that follow the steps below. Result handling can also be customized. + +#### Initialize the result block: + +This is all that's needed to render the result on the page. + +**display_progress.html** +```html +<div id="celery-result"></div> +``` + +But more likely you will want to customize how the result looks, which can be done as below: + +```javascript +// JQuery +var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + +function customResult(resultElement, result) { + $( resultElement ).append( + $('<p>').text('Sum of all seconds is ' + result) + ); +} + +$(function () { + CeleryProgressBar.initProgressBar(progressUrl, { + onResult: customResult, + }) +}); +``` + +## Customization + +The `initProgressBar` function takes an optional object of options. The following options are supported: + +| Option | What it does | Default Value | +|--------|--------------|---------------| +| pollInterval | How frequently to poll for progress (in milliseconds) | 500 | +| progressBarId | Override the ID used for the progress bar | 'progress-bar' | +| progressBarMessageId | Override the ID used for the progress bar message | 'progress-bar-message' | +| progressBarElement | Override the *element* used for the progress bar. If specified, progressBarId will be ignored. | document.getElementById(progressBarId) | +| progressBarMessageElement | Override the *element* used for the progress bar message. If specified, progressBarMessageId will be ignored. | document.getElementById(progressBarMessageId) | +| resultElementId | Override the ID used for the result | 'celery-result' | +| resultElement | Override the *element* used for the result. If specified, resultElementId will be ignored. | document.getElementById(resultElementId) | +| onProgress | function to call when progress is updated | onProgressDefault | +| onSuccess | function to call when progress successfully completes | onSuccessDefault | +| onError | function to call on a known error with no specified handler | onErrorDefault | +| onRetry | function to call when a task attempts to retry | onRetryDefault | +| onIgnored | function to call when a task result is ignored | onIgnoredDefault | +| onTaskError | function to call when progress completes with an error | onError | +| onNetworkError | function to call on a network error (ignored by WebSocket) | onError | +| onHttpError | function to call on a non-200 response (ignored by WebSocket) | onError | +| onDataError | function to call on a response that's not JSON or has invalid schema due to a programming error | onError | +| onResult | function to call when returned non empty result | CeleryProgressBar.onResultDefault | +| barColors | dictionary containing color values for various progress bar states. Colors that are not specified will defer to defaults | barColorsDefault | +| defaultMessages | dictionary containing default messages that can be overridden | see below | + +The `barColors` option allows you to customize the color of each progress bar state by passing a dictionary of key-value pairs of `state: #hexcode`. The defaults are shown below. + +| State | Hex Code | Image Color | +|-------|----------|:-------------:| +| success | #76ce60 |  | +| error | #dc4f63 |  | +| progress | #68a9ef |  | +| ignored | #7a7a7a |  | + +The `defaultMessages` option allows you to override some default messages in the UI. At the moment these are: + +| Message Id | When Shown | Default Value | +|-------|----------|:-------------:| +| waiting | Task is waiting to start | 'Waiting for task to start...' +| started | Task has started but reports no progress | 'Task started...' + +# WebSocket Support + +Additionally, this library offers WebSocket support using [Django Channels](https://channels.readthedocs.io/en/latest/) +courtesy of [EJH2](https://github.com/EJH2/). + +A working example project leveraging WebSockets is [available here](https://github.com/EJH2/cp_ws-example). + +To use WebSockets, install with `pip install celery-progress[websockets,redis]` or +`pip install celery-progress[websockets,rabbitmq]` (depending on broker dependencies). + +See `WebSocketProgressRecorder` and `websockets.js` for details. + +# Securing the get_progress endpoint +By default, anyone can see the status and result of any task by accessing `/celery-progress/<task_id>` + +To limit access, you need to wrap `get_progress()` in a view of your own which implements the permissions check, and create a new url routing to point to your view. Make sure to remove any existing (unprotected) celery progress urls from your root urlconf at the same time. + + +For example, requiring login with a class-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import View + +class TaskStatus(LoginRequiredMixin, View): + def get(self, request, task_id, *args, **kwargs): + # Other checks could go here + return get_progress(request, task_id=task_id) +``` + +```python +# urls.py +from django.urls import path +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.TaskStatus.as_view(), name='task_status'), + ... +] +``` + +Requiring login with a function-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.decorators import login_required + +@login_required +def task_status(request, task_id): + # Other checks could go here + return get_progress(request, task_id) +``` + +```python +# urls.py +from django.urls import path + +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.task_status, name='task_status'), + ... +] +``` + + +Any links to `'celery_progress:task_status'` will need to be changed to point to your new endpoint. + + + +%package help +Summary: Development documents and examples for celery-progress +Provides: python3-celery-progress-doc +%description help +# Celery Progress Bars for Django + +Drop in, dependency-free progress bars for your Django/Celery applications. + +Super simple setup. Lots of customization available. + +## Demo + +[Celery Progress Bar demo on Build With Django](https://buildwithdjango.com/projects/celery-progress/) + +### Github demo application: build a download progress bar for Django +Starting with Celery can be challenging, [eeintech](https://github.com/eeintech) built a complete [Django demo application](https://github.com/eeintech/django-celery-progress-demo) along with a [step-by-step guide](https://eeinte.ch/stream/progress-bar-django-using-celery/) to get you started on building your own progress bar! + +## Installation + +If you haven't already, make sure you have properly [set up celery in your project](https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#first-steps). + +Then install this library: + +```bash +pip install celery-progress +``` + +## Usage + +### Prerequisites + +First add `celery_progress` to your `INSTALLED_APPS` in `settings.py`. + +Then add the following url config to your main `urls.py`: + +```python +from django.urls import path, include + +urlpatterns = [ + # your project's patterns here + ... + path(r'^celery-progress/', include('celery_progress.urls')), # add this line (the endpoint is configurable) +] +``` + +### Recording Progress + +In your task you should add something like this: + +```python +from celery import shared_task +from celery_progress.backend import ProgressRecorder +import time + +@shared_task(bind=True) +def my_task(self, seconds): + progress_recorder = ProgressRecorder(self) + result = 0 + for i in range(seconds): + time.sleep(1) + result += i + progress_recorder.set_progress(i + 1, seconds) + return result +``` + +You can add an optional progress description like this: + +```python + progress_recorder.set_progress(i + 1, seconds, description='my progress description') +``` + +### Displaying progress + +In the view where you call the task you need to get the task ID like so: + +**views.py** +```python +def progress_view(request): + result = my_task.delay(10) + return render(request, 'display_progress.html', context={'task_id': result.task_id}) +``` + +Then in the page you want to show the progress bar you just do the following. + +#### Add the following HTML wherever you want your progress bar to appear: + +**display_progress.html** +```html +<div class='progress-wrapper'> + <div id='progress-bar' class='progress-bar' style="background-color: #68a9ef; width: 0%;"> </div> +</div> +<div id="progress-bar-message">Waiting for progress to start...</div> +``` + +#### Import the javascript file. + +**display_progress.html** +```html +<script src="{% static 'celery_progress/celery_progress.js' %}"></script> +``` + +#### Initialize the progress bar: + +```javascript +// vanilla JS version +document.addEventListener("DOMContentLoaded", function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl); +}); +``` + +or + +```javascript +// JQuery +$(function () { + var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + CeleryProgressBar.initProgressBar(progressUrl) +}); +``` + +### Displaying the result of a task + +If you'd like you can also display the result of your task on the front end. + +To do that follow the steps below. Result handling can also be customized. + +#### Initialize the result block: + +This is all that's needed to render the result on the page. + +**display_progress.html** +```html +<div id="celery-result"></div> +``` + +But more likely you will want to customize how the result looks, which can be done as below: + +```javascript +// JQuery +var progressUrl = "{% url 'celery_progress:task_status' task_id %}"; + +function customResult(resultElement, result) { + $( resultElement ).append( + $('<p>').text('Sum of all seconds is ' + result) + ); +} + +$(function () { + CeleryProgressBar.initProgressBar(progressUrl, { + onResult: customResult, + }) +}); +``` + +## Customization + +The `initProgressBar` function takes an optional object of options. The following options are supported: + +| Option | What it does | Default Value | +|--------|--------------|---------------| +| pollInterval | How frequently to poll for progress (in milliseconds) | 500 | +| progressBarId | Override the ID used for the progress bar | 'progress-bar' | +| progressBarMessageId | Override the ID used for the progress bar message | 'progress-bar-message' | +| progressBarElement | Override the *element* used for the progress bar. If specified, progressBarId will be ignored. | document.getElementById(progressBarId) | +| progressBarMessageElement | Override the *element* used for the progress bar message. If specified, progressBarMessageId will be ignored. | document.getElementById(progressBarMessageId) | +| resultElementId | Override the ID used for the result | 'celery-result' | +| resultElement | Override the *element* used for the result. If specified, resultElementId will be ignored. | document.getElementById(resultElementId) | +| onProgress | function to call when progress is updated | onProgressDefault | +| onSuccess | function to call when progress successfully completes | onSuccessDefault | +| onError | function to call on a known error with no specified handler | onErrorDefault | +| onRetry | function to call when a task attempts to retry | onRetryDefault | +| onIgnored | function to call when a task result is ignored | onIgnoredDefault | +| onTaskError | function to call when progress completes with an error | onError | +| onNetworkError | function to call on a network error (ignored by WebSocket) | onError | +| onHttpError | function to call on a non-200 response (ignored by WebSocket) | onError | +| onDataError | function to call on a response that's not JSON or has invalid schema due to a programming error | onError | +| onResult | function to call when returned non empty result | CeleryProgressBar.onResultDefault | +| barColors | dictionary containing color values for various progress bar states. Colors that are not specified will defer to defaults | barColorsDefault | +| defaultMessages | dictionary containing default messages that can be overridden | see below | + +The `barColors` option allows you to customize the color of each progress bar state by passing a dictionary of key-value pairs of `state: #hexcode`. The defaults are shown below. + +| State | Hex Code | Image Color | +|-------|----------|:-------------:| +| success | #76ce60 |  | +| error | #dc4f63 |  | +| progress | #68a9ef |  | +| ignored | #7a7a7a |  | + +The `defaultMessages` option allows you to override some default messages in the UI. At the moment these are: + +| Message Id | When Shown | Default Value | +|-------|----------|:-------------:| +| waiting | Task is waiting to start | 'Waiting for task to start...' +| started | Task has started but reports no progress | 'Task started...' + +# WebSocket Support + +Additionally, this library offers WebSocket support using [Django Channels](https://channels.readthedocs.io/en/latest/) +courtesy of [EJH2](https://github.com/EJH2/). + +A working example project leveraging WebSockets is [available here](https://github.com/EJH2/cp_ws-example). + +To use WebSockets, install with `pip install celery-progress[websockets,redis]` or +`pip install celery-progress[websockets,rabbitmq]` (depending on broker dependencies). + +See `WebSocketProgressRecorder` and `websockets.js` for details. + +# Securing the get_progress endpoint +By default, anyone can see the status and result of any task by accessing `/celery-progress/<task_id>` + +To limit access, you need to wrap `get_progress()` in a view of your own which implements the permissions check, and create a new url routing to point to your view. Make sure to remove any existing (unprotected) celery progress urls from your root urlconf at the same time. + + +For example, requiring login with a class-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import View + +class TaskStatus(LoginRequiredMixin, View): + def get(self, request, task_id, *args, **kwargs): + # Other checks could go here + return get_progress(request, task_id=task_id) +``` + +```python +# urls.py +from django.urls import path +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.TaskStatus.as_view(), name='task_status'), + ... +] +``` + +Requiring login with a function-based view: +```python + +# views.py +from celery_progress.views import get_progress +from django.contrib.auth.decorators import login_required + +@login_required +def task_status(request, task_id): + # Other checks could go here + return get_progress(request, task_id) +``` + +```python +# urls.py +from django.urls import path + +from . import views + +urlpatterns = [ + ... + path('task-status/<uuid:task_id>', views.task_status, name='task_status'), + ... +] +``` + + +Any links to `'celery_progress:task_status'` will need to be changed to point to your new endpoint. + + + +%prep +%autosetup -n celery-progress-0.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-celery-progress -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.3-1 +- Package Spec generated @@ -0,0 +1 @@ +7d802933d6fa1aa41ac6eb5556534e58 celery-progress-0.3.tar.gz |
