def task_progress_view(request, task_id): """Progress view for an asynchronous task""" if login_required_if_login_only_mode(request): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) default_title = "Please wait..." redirect_default = reverse("productdb:home") meta_data = get_meta_data_for_task(task_id) # title of the progress view if "title" in meta_data.keys(): title = meta_data["title"] else: title = default_title # redirect after task is completed if "redirect_to" in meta_data.keys(): redirect_to = meta_data["redirect_to"] auto_redirect = meta_data.get("auto_redirect", False) else: logger.warn("Cannot find redirect link to task meta data, use homepage") redirect_to = redirect_default auto_redirect = False context = { "task_id": task_id, "title": title, "redirect_to": redirect_to, "auto_redirect": auto_redirect } return render(request, "django_project/task_progress_view.html", context=context)
def task_progress_view(request, task_id): """ Progress view for an asynchronous task """ default_title = "Please wait..." redirect_default = reverse("productdb:home") meta_data = get_meta_data_for_task(task_id) # title of the progress view if "title" in meta_data.keys(): title = meta_data["title"] else: title = default_title # redirect after task is completed if "redirect_to" in meta_data.keys(): redirect_to = meta_data["redirect_to"] else: logger.warn( "Cannot find redirect link to task meta data, use homepage") redirect_to = redirect_default context = {"task_id": task_id, "title": title, "redirect_to": redirect_to} return render(request, "django_project/task_progress_view.html", context=context)
def task_progress_view(request, task_id): """Progress view for an asynchronous task""" if login_required_if_login_only_mode(request): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) default_title = "Please wait..." redirect_default = reverse("productdb:home") meta_data = get_meta_data_for_task(task_id) # title of the progress view if "title" in meta_data.keys(): title = meta_data["title"] else: title = default_title # redirect after task is completed if "redirect_to" in meta_data.keys(): redirect_to = meta_data["redirect_to"] auto_redirect = meta_data.get("auto_redirect", False) else: logger.warn( "Cannot find redirect link to task meta data, use homepage") redirect_to = redirect_default auto_redirect = False context = { "task_id": task_id, "title": title, "redirect_to": redirect_to, "auto_redirect": auto_redirect } return render(request, "django_project/task_progress_view.html", context=context)
def task_progress_view(request, task_id): """ Progress view for an asynchronous task """ default_title = "Please wait..." redirect_default = reverse("productdb:home") meta_data = get_meta_data_for_task(task_id) # title of the progress view if "title" in meta_data.keys(): title = meta_data["title"] else: title = default_title # redirect after task is completed if "redirect_to" in meta_data.keys(): redirect_to = meta_data["redirect_to"] else: logger.warn("Cannot find redirect link to task meta data, use homepage") redirect_to = redirect_default context = { "task_id": task_id, "title": title, "redirect_to": redirect_to } return render(request, "django_project/task_progress_view.html", context=context)
def test_custom_celery_task_meta_data(self): # custom meta data are used for the process watch view test_task_id = uuid.uuid4() test_title = "Custom Title" celery.set_meta_data_for_task(test_task_id, test_title) result = celery.get_meta_data_for_task(test_task_id) assert type(result) is dict assert "title" in result assert "auto_redirect" in result assert "redirect_to" not in result assert result["title"] == test_title assert result["auto_redirect"] is True
def test_custom_celery_task_meta_data_without_auto_redirect(self): # custom meta data are used for the process watch view test_task_id = uuid.uuid4() test_title = "Custom Title" test_redirect = "/productdb/" celery.set_meta_data_for_task(test_task_id, test_title, redirect_to=test_redirect, auto_redirect=False) result = celery.get_meta_data_for_task(test_task_id) assert type(result) is dict assert "title" in result assert "auto_redirect" in result assert "redirect_to" in result assert result["title"] == test_title assert result["auto_redirect"] is False assert result["redirect_to"] == test_redirect
def test_start_of_task(self, monkeypatch): """ Test the manual schedule of a synchronization process. To avoid a multiple execution, a cache value is set after the process is scheduled. This cache value contains the Task ID to monitor the execution process. If a task is already executed, the view should redirect to the process view for the Task ID. Furthermore, a meta data object for the task should be created """ user = mixer.blend("auth.User", is_superuser=True) # ensure that the task process ID is not set cache.delete(self.TASK_IDENTIFICATION_CACHE_VALUE) # get call to create task (should not run because no task backend is active at this point in time url = reverse(self.URL_NAME) request = RequestFactory().get(url) request.user = user response = views.start_cisco_eox_api_sync_now(request) assert response.status_code == 302 assert response.url == "/productdb/task/mock_task_id" assert get_meta_data_for_task(task_id="mock_task_id") == { "auto_redirect": False, "redirect_to": "/productdb/config/status/", "title": "Synchronize local database with Cisco EoX API" } # mock task schedule to raise an exception if called (verify that really the redirect works) def raise_exception(): raise Exception("should never happen") monkeypatch.setattr( tasks.execute_task_to_synchronize_cisco_eox_states, "delay", lambda ignore_periodic_sync_flag: raise_exception() ) # verify redirect url = reverse(self.URL_NAME) request = RequestFactory().get(url) request.user = user response = views.start_cisco_eox_api_sync_now(request) assert response.status_code == 302 assert response.url == "/productdb/task/mock_task_id"
def test_start_of_task(self, monkeypatch): """ Test the manual schedule of a synchronization process. To avoid a multiple execution, a cache value is set after the process is scheduled. This cache value contains the Task ID to monitor the execution process. If a task is already executed, the view should redirect to the process view for the Task ID. Furthermore, a meta data object for the task should be created """ user = mixer.blend("auth.User", is_superuser=True) # ensure that the task process ID is not set cache.delete(self.TASK_IDENTIFICATION_CACHE_VALUE) # get call to create task (should not run because no task backend is active at this point in time url = reverse(self.URL_NAME) request = RequestFactory().get(url) request.user = user response = views.start_cisco_eox_api_sync_now(request) assert response.status_code == 302 assert response.url == "/productdb/task/mock_task_id" assert get_meta_data_for_task(task_id="mock_task_id") == { "auto_redirect": False, "redirect_to": "/productdb/config/status/", "title": "Synchronize local database with Cisco EoX API" } # mock task schedule to raise an exception if called (verify that really the redirect works) def raise_exception(): raise Exception("should never happen") monkeypatch.setattr( tasks.execute_task_to_synchronize_cisco_eox_states, "delay", lambda ignore_periodic_sync_flag: raise_exception()) # verify redirect url = reverse(self.URL_NAME) request = RequestFactory().get(url) request.user = user response = views.start_cisco_eox_api_sync_now(request) assert response.status_code == 302 assert response.url == "/productdb/task/mock_task_id"
def test_get_invalid_task_meta_data(self): result = celery.get_meta_data_for_task("invalid id") assert result == {}